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("找不开! ");//找不开的问题未解决 33 } 34 printf("%d ",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 }