最简单的暴力解法,用dfs穷举出所有的可能性。动态规划的解法建议看力扣这道题:力扣
cpp
#include <iostream>
using namespace std;
int N;//总金额
int value[5]={1,5,10,25,50};//硬币面值
int coins=0;//题目要求最多考虑100个硬币
int dfs(int spv,int x){
//x:硬币种类,spv:剩余金额(总金额-已经取得的金额),coins硬币数
if(x>=5 || spv<0 || coins>100){
return 0;
}
if (spv==0)//剩余金额为0,说明当前方案可行,返回可行方案数1
{
return 1;
}
//再装一个当前硬币,金额--,硬币数++
spv-= value[x];
coins++;
int a = dfs(spv,x);
//不装当前硬币了,把金额+回去,硬币数-回去,回退到原来状态
spv+= value[x];
coins--;
int b = dfs(spv,++x);
return a+b;
}
int main()
{
while (cin>>N)
{
cout<<dfs(N,0)<<endl;
}
return 0;
}