为什么这个解决方案不适用于硬币更改算法?(垃圾值)

时间:2017-04-11 11:34:59

标签: c++ dynamic-programming

给定一个硬币列表,您可以通过多少种方式更改金额? 编写一个程序,给出

进行更改的金额和无限可用硬币的类型数量 硬币清单 - 打印出从硬币到STDOUT可以有多少种不同的改变方式。

我尝试了各种输入。我得到垃圾值作为输入的答案 10(N)4(M) 2 5 3 6 请解释一下?

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#define MAX 200
using namespace std;


long long coinchange(int coin[],int m,int n)// n =N
{
long long total[m][n+1];
/*
for(int j=0;j<m;j++)    {
    for(int i=0;j<n+1;i++)   {
        total[j][i] = 0;
    }
}
*/

for(int j=0;j<m;j++)
    total[j][0] = 1;

for(int i=0;i<m;i++) {
    for(int j=1;j<n+1;j++)  {
        if(j>=coin[i])
            total[i][j] = total[i-1][j] + total[i][j-coin[i]];
        else
            total[i][j] = total[i-1][j];
    }
}
return total[m-1][n];
}

int main() {
   int N,M;
   cin>>N;
   cin>>M;
   int coin[MAX];
   for(int i=0;i<M;i++)
      cin>>coin[i];
   cout<<coinchange(coin, M, N)<<endl;
   return 0;
}

0 个答案:

没有答案