如何计算硬币兑换中的不同组合? long-long-num(long-long-p) { 如果(P<P)这是一个不同硬币组合的数量的C++实现。 long long num(long long p) { if(p<0) return

如何计算硬币兑换中的不同组合? long-long-num(long-long-p) { 如果(P<P)这是一个不同硬币组合的数量的C++实现。 long long num(long long p) { if(p<0) return,c++,algorithm,dynamic-programming,combinatorics,C++,Algorithm,Dynamic Programming,Combinatorics,如何计算硬币兑换中的不同组合? long-long-num(long-long-p) { 如果(P<P)这是一个不同硬币组合的数量的C++实现。 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)+n

如何计算硬币兑换中的不同组合?
long-long-num(long-long-p)
{

如果(P<P)这是一个不同硬币组合的数量的C++实现。
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];
}
int组合(intd[],intr,intr)
{
如果(R==0)
返回1;
if(R<0)
返回0;
int-tot=0;
对于(int i=0;i

希望这有帮助。

这似乎是Math SOYou应该尝试的一件事,你只需要记住<代码> ListuSudioCin索引并只考虑更大或相等的硬币索引。请参见这里:但这与我的代码完全相同,除了使用A for循环。这将把1,1,2和1,2,1作为两种不同的可能性,我希望它们是。计算为1。
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;
}