Algorithm DP中的硬币制造问题-使用二维备忘表获得错误答案

Algorithm DP中的硬币制造问题-使用二维备忘表获得错误答案,algorithm,dynamic-programming,coin-change,Algorithm,Dynamic Programming,Coin Change,当我传递这个输入时,我得到了错误的答案 硬币[]={5,6} 金额(W)=10 我的答案是1 正确答案应该是2,即{5,5} void coin_make(int W, vector<int> coin){ int n = coin.size(); int dp[n+1][W+1]; for(int i = 0; i <=W; i++){ dp[0][i] = INT_MAX; } for(int i = 1; i <= n; i++){ for(

当我传递这个输入时,我得到了错误的答案

硬币[]={5,6}

金额(W)=10

我的答案是1

正确答案应该是2,即{5,5}

void coin_make(int W, vector<int> coin){

int n = coin.size();
int dp[n+1][W+1];


for(int i = 0; i <=W; i++){
    dp[0][i] = INT_MAX;
}

for(int i = 1; i <= n; i++){
    for(int j = 1; j <= W; j++){

        if(coin[i-1] == j){
            dp[i][j]  = 1;
        }
        else if(coin[i-1] > j){
            dp[i][j] = dp[i-1][j];
        }
        else {
            dp[i][j] = min(dp[i-1][j], 
                        1 + dp[i][j-coin[i-1]]);
        }
    }
}
cout<<dp[n][W];}
void coin\u make(整数W,矢量硬币){
int n=coin.size();
int dp[n+1][W+1];

对于(int i=0;i您在
dp[1][6]
上溢出,因为您试图计算
1+int\u MAX
。此错误会进一步传播,最终答案是不正确的。当我在我的机器上运行它时,我得到了
-2147483648
。您应该使用一些其他常量作为“无穷大”来防止溢出(例如
2e9
(或
-1
,但这需要一些额外的
if
语句)。然后,代码将在您提供的测试用例上正常工作。

打印表格,查看每个单元格是否包含您期望的数量。我会通过您的程序得到2的答案!