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,2
和1,2,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;
}
希望这有帮助。