teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

スペルミス訂正、解説を細かくしました

2019/01/23 17:04

投稿

Kota_Kappa
Kota_Kappa

スコア116

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<=all;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][totall]<rieki){
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
  もっと素晴らしいアルゴリズムがでてきたら、そちらも学んでみてください。