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

回答編集履歴

1

修正方法の追記

2021/02/16 20:46

投稿

actorbug
actorbug

スコア2513

answer CHANGED
@@ -3,4 +3,26 @@
3
3
  ```
4
4
 
5
5
  ここで、`m`が`a.at(i)`より小さいと、`solve`の引数`m`がマイナスになります。
6
- そうすると、`solve`の先頭でマイナスのインデックスにアクセスしようとしてエラーになります。
6
+ そうすると、`solve`の先頭でマイナスのインデックスにアクセスしようとしてエラーになります。
7
+
8
+ ---
9
+ 追記
10
+
11
+ `m`がマイナスならメモ化もせずに返るようにすれば修正できます。
12
+
13
+ ```diff
14
+ int solve(int i, int m) {
15
+ + if(m < 0) return 0;
16
+ if(dp.at(i).at(m) != -1) return dp.at(i).at(m); // 該当の部分が計算済みならそれを返す
17
+ ```
18
+
19
+ `m`がマイナスの時に`orim`で登録するのは誤りです。
20
+ 今回のコードだと実行順の関係で問題が発生することはありませんが、
21
+ `solve(i+1,m-a.at(i),orim)`側を先に呼び出すようになっていたら、正常動作しないパターンが出てきます。
22
+
23
+ ```text
24
+ 2
25
+ 4 3
26
+ 1
27
+ 3
28
+ ```