回答編集履歴
1
スペルミス訂正、解説を細かくしました
test
CHANGED
@@ -8,13 +8,13 @@
|
|
8
8
|
|
9
9
|
for(int total=0;total<8;total++){
|
10
10
|
|
11
|
-
for(int num2=0;num2<=all
|
11
|
+
for(int num2=0;num2<=total;total++){
|
12
12
|
|
13
13
|
for(int num1=0;num1<=(total-num2);num1++){
|
14
14
|
|
15
15
|
int rieki=tiiki2_rieki[num2]+tiiki1_rieki[num1]+tiiki0_rieki[total-num2-num1];
|
16
16
|
|
17
|
-
if(tiiki2_haken[0][total
|
17
|
+
if(tiiki2_haken[0][total]<rieki){
|
18
18
|
|
19
19
|
tiiki2_haken[0][total]=rieki;
|
20
20
|
|
@@ -84,4 +84,18 @@
|
|
84
84
|
|
85
85
|
こんな感じで作りました。
|
86
86
|
|
87
|
+
10通りの中に、同じ最大値を持つものが複数でてきます。(総数3以外の場合でも)
|
88
|
+
|
89
|
+
上だと、0-1-2と2-0-1の組などはいずれも最大値16になります。
|
90
|
+
|
91
|
+
しかし地域2への派遣人数を0で出力するには、0-1-2の組でtiiki2_haken[1][3]を確定しなければなりません。
|
92
|
+
|
93
|
+
そのため、forは地域2から先に回しています。
|
94
|
+
|
95
|
+
最も内側のifは、「計算した利益が最大値を更新した場合」に配列を更新する仕組みなので、
|
96
|
+
|
97
|
+
0-1-2の組を後に回すと最大値を更新できずに、tiiki2_haken[1][3]=0になりません。
|
98
|
+
|
99
|
+
|
100
|
+
|
87
101
|
もっと素晴らしいアルゴリズムがでてきたら、そちらも学んでみてください。
|