回答編集履歴
3
コードの修正
test
CHANGED
@@ -11,10 +11,10 @@
|
|
11
11
|
**追記**
|
12
12
|
```C++
|
13
13
|
if (j - a[i] >= 0) {
|
14
|
-
ch(dp[i][j],
|
14
|
+
ch(dp[i][j], a[i] + dp[i - 1][j - a[i]]);
|
15
15
|
}
|
16
16
|
```
|
17
17
|
このように変更するとどうなりますか?
|
18
18
|
|
19
|
-
どのような入力についてダメな結果にな
|
19
|
+
どのような入力についてダメな結果になるのですか?
|
20
20
|
|
2
追記
test
CHANGED
@@ -7,3 +7,14 @@
|
|
7
7
|
dp[i][j] を変更してはいけないのに、その小さい値に変更されてしまいます。
|
8
8
|
|
9
9
|
`+=` を `+` に変えてみてください。
|
10
|
+
|
11
|
+
**追記**
|
12
|
+
```C++
|
13
|
+
if (j - a[i] >= 0) {
|
14
|
+
ch(dp[i][j], (a[i] + dp[i - 1][j - a[i]]));
|
15
|
+
}
|
16
|
+
```
|
17
|
+
このように変更するとどうなりますか?
|
18
|
+
|
19
|
+
どのような入力についてダメな結果になりますか?
|
20
|
+
|
1
` の修正
test
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
`ch(dp[i][j], (dp[i][j] += dp[i - 1][j - a[i]]));`
|
2
|
-
これだと、+= により、関数ch の呼出しの前に dp[i][j] の値が変更されます。
|
2
|
+
これだと、`+=` により、関数ch の呼出しの前に dp[i][j] の値が変更されます。
|
3
3
|
関数ch の中の a は dp[i][j] であり、b は dp[i][j] の値です。
|
4
4
|
したがって、a の値と b の値は常に等しく、a < b は true になりません。
|
5
5
|
関数 ch は何もしないことになります。
|
6
6
|
dp[i][j] + dp[i - 1][j - a[i]] が dp[i][j] より小さいときは
|
7
7
|
dp[i][j] を変更してはいけないのに、その小さい値に変更されてしまいます。
|
8
8
|
|
9
|
-
`+=` を `+
|
9
|
+
`+=` を `+` に変えてみてください。
|