回答編集履歴

2

修正

2020/04/08 20:16

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  dp[i + 1][j + x[i]][k + 1] += dp[i][j][k]; //x[i]を取った場合
42
42
 
43
- dp[i + 1][j][k] = dp[i][j][k]; //x[i]を取らなかった場合
43
+ dp[i + 1][j][k] += dp[i][j][k]; //x[i]を取らなかった場合
44
44
 
45
45
  }
46
46
 

1

修正

2020/04/08 20:15

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  dp[1][0][0]=1,dp[1][1][3]=1となり、それ以外のdp[1][j][k]は0のままになります。
6
6
 
7
- ところが、i=0のループではk=0しか取れないため、forの中でelseにしか入れません。
7
+ ところが、質問者のロジックでは**i=0のループではk=0しか取れない**ため、forの中でelseにしか入れません。
8
8
 
9
9
  そのため、dp[1][j][k]はdp[0][j][k]をそのままコピー、つまりdp[1][0][0]=1以外が0になってしまいます。
10
10
 
@@ -14,11 +14,11 @@
14
14
 
15
15
 
16
16
 
17
- と考えたことにあります。iは正しくは「今現在考慮している番号」で、kは「そこまでで実際に取ろうとしているカード枚数」になります。iが0始まりである関係上、kの最大値はi+1になります。
17
+ と考えたことにあります。iは正しくは「今現在考慮している番号」で、kは「そこまでで実際に取ろうとしているカード枚数」になります。iが0始まりである関係上、**kの最大値はi+1**になります。上記理由のため、「そこまでのカードすべて取る」などが実現不可能になっています。
18
18
 
19
19
  ### 質問2への回答
20
20
 
21
- Aがカードの平均値以上であれば問題ありませんが、カード平均値未満である場合、sum/Aがカード枚数Nを超える可能性があります。その場合、範囲外アクセスをしてしまます。
21
+ Aがカードの平均値以上であれば問題ありませんが、カード平均値未満である場合、sum/Aがカード枚数Nを超える可能性があります。その場合、範囲外アクセスをしてしまう可能性があります。
22
22
 
23
23
 
24
24