horiuchi #4832(2007/12/15 11:08 GMT) [ Java ] Rating0/0=0.00
Pen4 2.4Gで実行して、
と、なりました。 簡単に枝狩りをしただけの、総当りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Answer108 { private final int size_; private final int maxNumber_; private final int average_; private int count_ = 0; public Answer108(int size) { size_ = size; maxNumber_ = size * size; average_ = size * (maxNumber_ + 1) / 2; countPair(); } private void countPair() { if (size_ <= 1) return; List<List<Integer>> array = new ArrayList<List<Integer>>(); for (int index = 0; index < size_; index++) { array.add(new ArrayList<Integer>()); } array.get(0).add(1); countPair(array, 2); } private void countPair(List<List<Integer>> array, int nextNumber) { if (nextNumber <= maxNumber_) { for (int index = 0; index < size_; index++) { List<Integer> list = array.get(index); int size = list.size(); if (size == size_) continue; if (size == size_ - 1) { if (sum(list) + nextNumber != average_) continue; } else { int rest = 0; for (int lastIndex = 0; lastIndex < size_ - size - 1; lastIndex++) { rest += maxNumber_ - lastIndex; } if (sum(list) + nextNumber + rest < average_) continue; } if (index >= nextNumber) continue; list.add(nextNumber); countPair(array, nextNumber + 1); list.remove(Integer.valueOf(nextNumber)); if (list.size() == 0) break; } } else { //System.out.println(toString(array)); count_++; } } private int sum(List<Integer> array) { int sum = 0; for (int num: array) { sum += num; } return sum; } public int getCount() { return count_; } public static String toString(List<List<Integer>> array) { String[] strs = new String[array.size()]; for (int index = 0; index < strs.length; index++) { strs[index] = array.get(index).toString(); } return Arrays.toString(strs); } public static void main(String[] args) { long start = System.currentTimeMillis(); Answer108 ans = new Answer108(5); System.out.println(ans.getCount()); long end = System.currentTimeMillis(); System.out.println("elapse: " + (end - start) + "(ms)"); } }
Rating0/0=0.00-0+
[ reply ]
horiuchi
#4832()
[
Java
]
Rating0/0=0.00
Pen4 2.4Gで実行して、
と、なりました。 簡単に枝狩りをしただけの、総当りです。
Rating0/0=0.00-0+
[ reply ]