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 }