题目:给定不同的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最少硬币的个数,如果没有任何异样硬币组合成总金额,返回-1。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
/*
money[i]=min(money[i-biil[j]]+1);
*/
int distribute(int n)
{
vector<int> bill = { 1,2,5,10,25 };
//将Money数组全部初始化为-1表示还没被访问或者使用
vector<int> money(n + 1,-1);
//这个很重要,是返回的依据
money[0] = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 0; j < bill.size(); j++)
{
//套入公式
if (i >= bill[j] && money[i - bill[j]] != -1)
{
//已经被其他策略填充,则比较现在与以前策略哪个更好
if (money[i] > 0)
money[i] = min(money[i], money[i - bill[j]] + 1);
else
money[i] = money[i - bill[j]] + 1;
}
}
}
return money[n];
}
int main()
{
int n;
cin >> n;
cout << distribute(n) << endl;
return 0;
}
京公网安备 11010502036488号