如何计算硬币变化中的不同组合?

时间:2017-12-22 21:14:18

标签: c++ algorithm dynamic-programming combinatorics

long long num(long long p)
{
   if(p<0)
      return 0;
   if(p==0)
      return 1;
   if(t[p]!=0)
      return t[p];
   t[p]=num(p-1)+num(p-2)+num(p-5)+num(p-10)+num(p-20)+num(p-50)+num(p-100);
   return t[p];
}

我使用此方法num来计算硬币更改问题的可能方式的数量。问题是此方法将1,1,21,2,1计为不同,应将其视为1。如何要做到这一点? 无法在任何地方找到任何好的解决方案。

1 个答案:

答案 0 :(得分:0)

这是不同硬币组合数量的C ++实现。

int combo(int d[], int r, int R)
{
    if (R == 0)
        return 1;
    if (R < 0)
        return 0;

    int tot = 0;

    for (int i = 0; i < r; i++) 
        tot += combo(d, r, R - d[i]);

    return tot;
}

希望这有帮助。