动态规划------硬币问题

 1 //dp[i]=dp[i-vj]+1
 2 #include<stdio.h>
 3 int main()
 4 {
 5     int dp[20];
 6     int money;
 7     int useMoney[20];//这次找零,在原来的基础上需要的硬币 
 8     int value[]={0,2,4,5};
 9     int i,j;
10     while(~scanf("%d",&money))
11   {
12     for(i=0;i<12;i++)
13     {
14         dp[i]=99999;
15     }
16     dp[0]=0;
17     for(i=0;i<12;i++)
18     {
19         for(j=1;j<4;j++)//注意从1开始
20         {
21 
22             if(value[j]<=i&&(dp[i-value[j]]+1<dp[i]))
23             {
24                 dp[i]=dp[i-value[j]]+1;
25                 useMoney[i]=value[j];//
26             }
27         }
28         
29     }
30     if(useMoney[money]==0)
31     {
32         printf("找不开!\n");//找不开的问题未解决
33     }
34     printf("%d\n",dp[money]);//需要多少硬币
35     while(money>0)  //需要的硬币分别是多少
36     {  
37         printf("%d,",useMoney[money]);
38         money-=useMoney[money];  
39     }  
40     /*for(k=0;k<=dp[money];k++)
41     {
42         printf("%d ",useMoney[k]);
43     }*/
44 }
45     return 0;
46 }

 

posted @ 2018-01-22 10:57  Curo  阅读(166)  评论(0编辑  收藏  举报