算法导论 思考题 16-1 d小题 找零问题

来源:互联网 发布:淘宝大熊哥佛牌怎么样 编辑:程序博客网 时间:2024/05/20 19:19
#include <stdio.h>#include <stdlib.h>#include <limits.h>#define N 52#define M 4int coins[M+1]={0,25,6,5,1};void dp(int *a,int *b){a[0]=b[0]=0;for(int i=1;i<=N;i++){a[i]=INT_MAX;b[i]=0;for(int j=1;j<=M;j++){if(i-coins[j]<0)continue;int x=a[i];int y=a[i-coins[j]]+1;if(x<=y){a[i]=x;}else{a[i]=y;b[i]=j;}}}}void printA(int*a){for(int j=0;j<=N;j++){printf("%d ",a[j]);}printf("\n");}void getTrace(int *b){int j=N;while(j>0){printf("%d ",coins[b[j]]);j-=coins[b[j]];}}void main(){int *a=(int *)malloc((N+1)*sizeof(int));int *b=(int *)malloc((N+1)*sizeof(int));dp(a,b);//printf("%d",a[M][N]);printA(a);printA(b);getTrace(b);getchar();}