硬币找零(动态规划)

来源:互联网 发布:医疗器械软件确认报告 编辑:程序博客网 时间:2024/05/16 13:51

#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);
 }

原创粉丝点击