hdu2609

这一道题有一个需要考虑的东东,就是硬币的数量不可以超过100,如果没有这个条件的话,还真的是水题一枚

所以这道题要用到二维数组,其中有一个来存硬币的

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 int res[255][105];//第一个中括号表示金额,第二个中括号表示硬笔数量,值表示有多少种方法
 5 int tmp[255][105];
 6 int main ()
 7 {
 8     memset(res,0,sizeof(res));
 9     memset(tmp,0,sizeof(tmp));
10     int value[]={0,1,5,10,25,50};
11     int i,j,k,t;
12     for(i=0;i<=100;i++) res[i][i]=1;//初始化第一个表达式
13     for(i=2;i<=5;i++)
14     {
15         for(j=0;j<=250;j++)
16         {
17             for(k=0;k+j<=250;k=k+value[i])
18             {
19                 for(t=0;t+k/value[i]<=100;t++)
20                 {
21                     tmp[j+k][t+k/value[i]]+=res[j][t];
22                 }
23             }
24         }
25         for(j=0;j<=250;j++)
26         {
27             for(t=0;t<=100;t++)
28             {
29                 res[j][t]=tmp[j][t];
30                 tmp[j][t]=0;
31             }
32         }
33     }
34     int ans=0;
35     int money;
36     while(cin>>money)
37     {
38         ans=0;
39         for(t=0;t<=100;t++)
40         {
41             ans=ans+res[money][t];
42         }
43         cout<<ans<<endl;
44     }
45     return 0;
46 }

今天写题很不爽,虽然不是这一道……

posted on 2012-08-13 21:51  矮人狙击手!  阅读(231)  评论(0编辑  收藏  举报

导航