最少硬币兑换问题
#include<iostream> #include<fstream> using namespace std; int n,L; //n种硬币L长的数组 int c[13][20]; int T[13];//硬币面值 int jisuan(int i,int j); int main() { fstream file("2.1_input.txt"); //这是需要读取数据的文件的路径。 fstream file2("2.1_output.txt"); //这是需要输出数据的文件的路径。 if(file.fail() || file2.fail()) { cout<<"The file open error!"<<endl; } else { file>>n; for(int i=1;i<=n;i++) { file>>T[i]; } file>>L; } int k; k=jisuan(n,L); file2<<k<<endl; return 0; } int jisuan(int i,int j) { int min; if((i==0)||(j==0)) c[i][j]=0; if(i==1) { if(((1<=j)&&(j<T[1]))||((T[1]<=j)&&(j<=L)&&(j%T[1]!=0))) c[i][j]=500; if((T[i]<=j)&&(j<=L)&&(j%T[i]==0)) c[i][j]=j/T[i]; } else { min=jisuan(i-1,j); for(int x=j/T[i];x>0;x--) { int a=jisuan(i-1,j-x*T[i])+x; if(min>a) min=a; } c[i][j]=min; } return c[i][j]; }
时间: 2024-11-03 10:11:27