【问题标题】:How can I count distinct combinations in coin change? [duplicate]如何计算硬币变化中的不同组合? [复制]
【发布时间】:2017-12-22 21:14:17
【问题描述】:
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。如何做到这一点? 在任何地方都找不到任何好的解决方案。

【问题讨论】:

标签: c++ algorithm dynamic-programming combinatorics


【解决方案1】:

这是不同硬币组合数量的 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;
}

希望这会有所帮助。

【讨论】:

  • 但这与我的代码完全相同,只是您使用了 for 循环。这会将 1,1,2 和 1,2,1 视为两种不同的可能性,我希望将它们计为1.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
相关资源
最近更新 更多