题目:
https://www.luogu.com.cn/problem/B3635
用贪心可以但是会有测试点不过。比如15,11+1+1+1+1=15.或者5+5+5=15,如果你是贪心把最大值的硬币放在第一个,那么这个测试点就错误了。用记忆化搜索可以,因为贪心只能测一次,记忆化可以测多次,求出最少硬币的可能。
#include <iostream>
using namespace std;
typedef long long ll;
ll n;
ll nums[10] = {0,11,5,1};
ll mem[2000000];
ll dfs(ll k)
{if(mem[k])return mem[k];ll res = 1e6;if(k == 0)return 0;for(int i = 1 ; i <= 3 ; i++){if(k >= nums[i])res = min(res,dfs(k-nums[i]) + 1);减成功就+1(一个硬币),找出最少硬币可能} mem[k] = res;return res;}
int main(void) {cin >> n;int ans = dfs(n);cout << ans;return 0;
}