#include "stdlib.h"
#define N 63
void GetChange(int n,int j,int m[],int c[][N] )
{
/*下标从1开始*/
int Max=10000;
int k,i,t;
int b[5]={0}; /*最好作为一个参数*/
for( i=1;i<=n;i++)
c[i][0]=0;
for(i=1;i<=j;i++)
{
if(i>=m[1])
{
c[1][i]=(i%m[1]==0)?i/m[1]:Max;
}
else
c[1][i]=Max;
}
for( i=2;i<=n;i++)
{
for(k=1;k<=j;k++)
{
if(k>=m[i])
{
c[i][k]=min (c[i][k-m[i]]+1,c[i-1][k]);
c[i][k]=min (c[i][k],Max);
}
else
{
c[i][k]=c[i-1][k];
}
}
}
k=j;
t=n;
if(c[t][k]<Max )
{
while(k>0)
{
if(c[t][k]==c[t-1][k]) t--;
else
{
b[t]++;
k-=m[t];
}
}
for(k=1;k<=n;k++)
{
printf("%d:%d ",m[k],b[k]);
}
printf("/n");
}
}
void main()
{
int m[]={0,2,3,5,8} ;
int n=5,j=13,c[6][N];
int i;
for(i=13;i<40;i++)
GetChange(n,i,m,c);
}