回答編集履歴

3

コードの修正

2022/08/14 23:53

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -11,10 +11,10 @@
11
11
  **追記**
12
12
  ```C++
13
13
  if (j - a[i] >= 0) {
14
- ch(dp[i][j], (a[i] + dp[i - 1][j - a[i]]));
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

追記

2022/08/14 10:15

投稿

kazuma-s
kazuma-s

スコア8224

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

` の修正

2022/08/13 23:48

投稿

kazuma-s
kazuma-s

スコア8224

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
+ `+=` を `+` に変えてみてください。