#include "iostream"
#include "algorithm"
#include "fstream"
using namespace std;
#define INF 100000
/*
f[j]表示所找钱数为j,需要的最少硬币数
f[j] = min{f[j], f[j-ti]+1}
*/
int f[100];
int t[100]; //面额
int num[100]; //对应面额的硬币数量
int min(int a, int b)
{
return a<b? a:b;
}
int solve(int n, int m)
{
for(int j=1; j<=m; j++)
f[j] = INF;
for(int i=1; i<=n; i++) //硬币种数
for(int k=1; k<=num[i]; k++) //相应硬币个数
for(int j=m; j>=t[i]; j--) //要找的钱
f[j] = min(f[j], f[j-t[i]]+1);
return f[m];
}
int main()
{
ifstream fin("coins.txt");
int n;
fin >> n;
cout << "硬币种数为:" << n;
cout << "\n各种硬币面值及对应数量分别为:\n";
for(int i=1; i<=n; i++)
{
fin >> t[i] >> num[i];
cout << t[i] << " " << num[i] << endl;
}
int m;
fin >> m;
cout << "要找的钱数为:" << m << endl;
cout << "最少硬币数为:" << solve(n, m) << endl;
fin.close();
return 0;
}
最少硬币问题
最新推荐文章于 2022-03-06 14:02:41 发布