一共有1、4、5三种面值的货币,现在给定一个目标货币值n,问怎么选取货币使得选出的货币最少,并输出每种货币的数量
例如:input :6 output : 1,0,1
这道题的思路不能用贪心算法,因为货币的面值并不是最小组成的面值(1、2、5就可以用贪心),所以要bfs找一圈才可以。
代码如下
#include <iostream>
using namespace std;
int main ()
{
int aim;
cin >> aim;
if (aim == 1) {
cout << 1<< "," << 0<< "," << 0<< endl;
} else if (aim == 2) {
cout << 2<< "," << 0<< "," << 0<< endl;
} else if (aim == 3) {
cout << 3<< "," << 0<< "," << 0<< endl;
}
int last = aim;
int aimI = 0, aimJ = 0, aimK = 0;
for (int i = 0; i <= aim; i++)
for (int j = 0; j <= aim / 4; j++)
for (int k = 0; k <= aim / 5; k++) {
int temp = i + j * 4 + k * 5;
if (temp == aim && last > i + j + k) {
last = i + j + k;
aimI = i;
aimJ = j;
aimK = k;
}
}
cout << aimI << "," << aimJ << "," << aimK << endl;
return 0;
}
遍历出所有的情况,匹配出最小可能性即可
要注意,输入为1、2、3的情况要单独考虑,因为这些不会被dp算进去