結果
問題 | No.50 おもちゃ箱 |
ユーザー | jp_ste |
提出日時 | 2016-05-23 05:40:52 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 1,002 ms / 5,000 ms |
コード長 | 4,663 bytes |
コンパイル時間 | 4,789 ms |
コンパイル使用メモリ | 83,560 KB |
実行使用メモリ | 119,536 KB |
最終ジャッジ日時 | 2024-06-25 21:15:00 |
合計ジャッジ時間 | 14,541 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 123 ms
41,208 KB |
testcase_01 | AC | 532 ms
68,240 KB |
testcase_02 | AC | 126 ms
41,624 KB |
testcase_03 | AC | 126 ms
41,564 KB |
testcase_04 | AC | 98 ms
39,660 KB |
testcase_05 | AC | 145 ms
42,256 KB |
testcase_06 | AC | 144 ms
42,348 KB |
testcase_07 | AC | 123 ms
40,172 KB |
testcase_08 | AC | 128 ms
41,696 KB |
testcase_09 | AC | 113 ms
40,824 KB |
testcase_10 | AC | 111 ms
40,640 KB |
testcase_11 | AC | 129 ms
41,692 KB |
testcase_12 | AC | 111 ms
40,436 KB |
testcase_13 | AC | 129 ms
41,404 KB |
testcase_14 | AC | 119 ms
40,984 KB |
testcase_15 | AC | 116 ms
40,552 KB |
testcase_16 | AC | 124 ms
41,080 KB |
testcase_17 | AC | 118 ms
40,968 KB |
testcase_18 | AC | 110 ms
40,788 KB |
testcase_19 | AC | 591 ms
76,896 KB |
testcase_20 | AC | 123 ms
41,088 KB |
testcase_21 | AC | 161 ms
43,360 KB |
testcase_22 | AC | 171 ms
46,608 KB |
testcase_23 | AC | 116 ms
41,200 KB |
testcase_24 | AC | 118 ms
41,256 KB |
testcase_25 | AC | 120 ms
41,484 KB |
testcase_26 | AC | 144 ms
42,132 KB |
testcase_27 | AC | 180 ms
47,444 KB |
testcase_28 | AC | 171 ms
44,244 KB |
testcase_29 | AC | 158 ms
43,372 KB |
testcase_30 | AC | 131 ms
41,684 KB |
testcase_31 | AC | 126 ms
41,592 KB |
testcase_32 | AC | 269 ms
55,464 KB |
testcase_33 | AC | 1,002 ms
119,536 KB |
testcase_34 | AC | 162 ms
45,020 KB |
testcase_35 | AC | 201 ms
49,832 KB |
testcase_36 | AC | 416 ms
63,428 KB |
testcase_37 | AC | 145 ms
42,296 KB |
testcase_38 | AC | 151 ms
43,416 KB |
testcase_39 | AC | 217 ms
50,068 KB |
testcase_40 | AC | 749 ms
100,868 KB |
testcase_41 | AC | 158 ms
43,836 KB |
ソースコード
import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.Scanner; public class Main2 { static int n, m; static ArrayList<Integer> a, b; public static void main(String[] args) { try (Scanner scan = new Scanner(System.in)) { n = Integer.parseInt(scan.next()); a = new ArrayList<>(); for(int i=0; i<n; i++) { a.add(Integer.parseInt(scan.next())); } m = Integer.parseInt(scan.next()); b = new ArrayList<>(); for(int i=0; i<m; i++) { b.add(Integer.parseInt(scan.next())); } a.sort(Collections.reverseOrder()); b.sort(Collections.reverseOrder()); LinkedList< ArrayList<Integer> > checkList = new LinkedList<>(); LinkedList< ArrayList<Integer> > nextCheckList = new LinkedList<>(); checkList.add(a); for(int i=0; i<b.size(); i++) { while(!checkList.isEmpty()) { final ArrayList<Integer> nowList = checkList.poll(); boolean flag = false; for(Integer v : nowList) { if(b.get(i) < v) { flag = true; break; } } if(flag) continue; nodeList.clear(); solve(0, b.get(i), new ArrayList<Integer>(), nowList); for(int k=0; k<nodeList.size(); k++) { ArrayList<Integer> pList = nodeList.get(k).list; ArrayList<Integer> tmpList = (ArrayList<Integer>)nowList.clone(); for(int j=0; j<pList.size(); j++) { tmpList.remove(pList.get(j)); } if(tmpList.size() == 0) { System.out.println(i+1); System.exit(0); } nextCheckList.add(tmpList); } } checkList = (LinkedList< ArrayList<Integer> >)nextCheckList.clone(); nextCheckList.clear(); } System.out.println(-1); } } static ArrayList<Node> nodeList = new ArrayList<>(); static void solve(int i, int box, ArrayList<Integer> list, ArrayList<Integer> a) { ArrayList<Integer> tmpList = (ArrayList<Integer>)list.clone(); if(i == a.size()) { Node node = new Node(box, (ArrayList<Integer>)list.clone()); for(Node now : nodeList) { if(node.equals(now)) { return; } } nodeList.add(node); return; } solve(i+1, box, tmpList, a); if((box - a.get(i)) >= 0) { tmpList.add(a.get(i)); solve(i+1, box-a.get(i), tmpList, a); } } static class Node implements Comparable<Node> { int rem; ArrayList<Integer> list; Node(int rem, ArrayList<Integer> list) { this.rem = rem; this.list = list; } @Override public int compareTo(Node o) { if(rem == o.rem) { if(list.size() == o.list.size()) { for(int i=0; i<list.size(); i++) { if(list.get(i) == o.list.get(i)) continue; return o.list.get(i) - list.get(i); } return 0; } else { return list.size() - o.list.size(); } } else { return rem - o.rem; } } @Override public String toString() { return rem + " " + list.toString(); } @Override public boolean equals(Object obj) { Node t = (Node)obj; boolean flag = true; if(list.size() != t.list.size()) { flag = false; } else { for(int i=0; i<list.size(); i++) { if(list.get(i) != t.list.get(i)) { flag = false; break; } } } return flag; } } }