hdu 1284

钱币兑换问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7261    Accepted Submission(s): 4265

Problem Description
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
 
Input
每行只有一个正整数N,N小于32768。
 
Output
对应每个输入,输出兑换方法数。
 
Sample Input
2934 12553
 
Sample Output
718831 13137761
 
Author
SmallBeer(CML)
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:   1171  2191  2602  1248  1203 
这题可以采用母函数或者递推或者其他规律。
设d[i][j]为前i个硬币可以兑换j的数量,考虑第i个,要么不取,数量就为d[i-1][j],要么取,数量就为d[i-1][j-v[i]];v[i]==i;
d[i][j]就等于这两种情况之和.
#include <iostream>

#include <cstdio>

#include <cstring>

using namespace std;

long long  d[42768];

void init()

{

    memset(d,0,sizeof(d));

}

int main()

{

    int n;

    while(~scanf("%d",&n))

    {

        init();

        if(n==0)

         {

             printf("0\n");

             continue;

         }

        if(n==1)

        {

            printf("1\n");

            continue;

        }

        d[0]=1;

         for(int i=1;i<=3;i++)

            for(int j=i;j<=n;j++)

         {



              d[j]=d[j]+d[j-i];

         }

        printf("%lld\n",d[n]);

    }

    return 0;

}

 

你可能感兴趣的:(HDU)