您的位置:首页 > 其它

最少硬币问题

2015-11-18 11:50 197 查看
#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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: