算法实验之动态规划

来源:互联网 发布:统一网关网络加速器 编辑:程序博客网 时间:2024/05/16 08:18

 

算法实验之动态规划

 

设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱,可以实用的各种面值的硬币个数不限。当只用硬币面值T[1],T[2],…,T[i]时,可找出钱数j的最少硬币个数记为C(i,j)。若只用这些硬币面值,找不出钱数j时,记C(i,j)=∞。 

输入结果保存在1.txt中,输出结果保存在2.txt中。

[cpp] view plaincopy
  1. #include<iostream>  
  2. #include <fstream>  
  3. using namespace std;  
  4. int change_coin(int a[],int k,int ch)  
  5. {  
  6.     int **c=new int*[k];  
  7.     for(int i=0;i<k;i++)  
  8.         c[i]=new int[ch+1];  
  9.     for(i=0;i<=ch;i++)  
  10.     {  
  11.         if(ch%a[0]==0)  
  12.             c[0][i]=i/a[0];  
  13.         else  
  14.             c[0][i]=INT_MAX;  
  15.     }  
  16.     for(int j=1;j<k;j++)  
  17.     {  
  18.         for(i=0;i<=ch;i++)  
  19.             if(i<a[j])  
  20.                 c[j][i]=c[j-1][i];  
  21.             else  
  22.                 c[j][i]=c[j-1][i]<c[j][i-a[j]]+1?c[j-1][i]:c[j][i-a[j]]+1;  
  23.     }  
  24.   
  25.     return c[k-1][ch];  
  26.   
  27.   
  28. }  
  29. int main()  
  30. {  
  31.     int k;  
  32.     int a[3];  
  33.     int ch;  
  34.     ifstream in("1.txt");  
  35.     ofstream out("2.txt");  
  36.     in>>k;  
  37.     for(int i=0;i<k;i++)  
  38.         in>>a[i];  
  39.     cout<<"请输入待找钱数"<<endl;  
  40.     cin>>ch;  
  41.     int res=change_coin(a,k,ch);  
  42.     cout<<"找钱个数为:"<<res<<endl;  
  43.   
  44.     out<<res;  
  45.     in.close();  
  46.     out.close();  
  47.   
  48.     return 1;  
  49.   
  50. }  

原创粉丝点击