基础题。
#include <iostream>
using namespace std;
int main()
{
int one, two, five; //三种硬币的数量
bool pay[8005]; //能否凑出
while (cin >> one >> two >> five)
{
if (one + two + five == 0)
break;
memset(pay, false, sizeof(pay));
for (int i = 0; i <= one; i++) //一分硬币
{
pay[i] = true;
}
for (int j = 0; j <= two; j++) //一分、二分硬币
{
for (int i = 0; i <= one; i++)
{
if (pay[i])
pay[j * 2 + i] = true;
}
}
for (int k = 0; k <= five; k++) //一分、二分、五分硬币
{
for (int j = 0; j <= two * 2 + one; j++)
{
if (pay[j])
pay[k * 5 + j] = true;
}
}
for (int i = 0; i <= one + 2 * two + 5 * five + 1; i++) //查找最小
{
if (pay[i] == false)
{
cout << i << endl;
break;
}
}
}
return 0;
}
继续加油。
本文探讨了使用动态规划解决硬币组合问题的方法,通过枚举一分、二分和五分硬币的数量,找出无法组成的最小金额。代码实现中利用布尔数组记录每种金额是否能被组合,并通过迭代更新来寻找答案。
5299

被折叠的 条评论
为什么被折叠?



