回答編集履歴
1
スペルミス訂正、解説を細かくしました
answer
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
単にforを回して網羅しているだけです。
|
4
4
|
```java
|
5
5
|
for(int total=0;total<8;total++){
|
6
|
-
for(int num2=0;num2<=
|
6
|
+
for(int num2=0;num2<=total;total++){
|
7
7
|
for(int num1=0;num1<=(total-num2);num1++){
|
8
8
|
int rieki=tiiki2_rieki[num2]+tiiki1_rieki[num1]+tiiki0_rieki[total-num2-num1];
|
9
|
-
if(tiiki2_haken[0][
|
9
|
+
if(tiiki2_haken[0][total]<rieki){
|
10
10
|
tiiki2_haken[0][total]=rieki;
|
11
11
|
tiiki2_haken[1][total]=num2;
|
12
12
|
}
|
@@ -41,4 +41,11 @@
|
|
41
41
|
地域0の人数は地域1の人数とone-to-one対応するので分岐の必要なし
|
42
42
|
|
43
43
|
こんな感じで作りました。
|
44
|
+
10通りの中に、同じ最大値を持つものが複数でてきます。(総数3以外の場合でも)
|
45
|
+
上だと、0-1-2と2-0-1の組などはいずれも最大値16になります。
|
46
|
+
しかし地域2への派遣人数を0で出力するには、0-1-2の組でtiiki2_haken[1][3]を確定しなければなりません。
|
47
|
+
そのため、forは地域2から先に回しています。
|
48
|
+
最も内側のifは、「計算した利益が最大値を更新した場合」に配列を更新する仕組みなので、
|
49
|
+
0-1-2の組を後に回すと最大値を更新できずに、tiiki2_haken[1][3]=0になりません。
|
50
|
+
|
44
51
|
もっと素晴らしいアルゴリズムがでてきたら、そちらも学んでみてください。
|