我是靠谱客的博主 安详芝麻,最近开发中收集的这篇文章主要介绍动态规划解决换硬币问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题解:钱的总数为sum ,有 n 中不同面值的零钱,问有多少种兑换方式

// sum 总钱数 , n 为零钱的种类数目
#define MaxSum 1000
// 最大兑换钱数
#define MaxNum 10
// 最大零钱总数
int dp[MaxNum][MaxSum]; // 求解数组, 
//其中MaxNum代表可以兑换成硬币的种类,
//MaxSum代表所兑换成的金额,数组值表示该兑换金额下有多少种兑换方法。
int changeMoney(int sum,int n)
{
vector<int> V; //存放零钱数值的数组
V.push_back(0); // 不使用下标0
int tmp,i;
for(int i=0;i<n;i++)
{
cout<<"请输入零钱的数值:"<<endl;
cin>>tmp;
V.push_back(tmp);
}
// 初始化dp数组
for(i=0;i<=n;i++)
{
dp[i][0] = 1; //第i种零钱,兑换0元钱,只有1种兑换方式
}
for(i=1;i<=sum;i++)
{
dp[0][i] = 0; //第0种零钱,兑换i元钱,只有0种兑换方式
}
for(i=1;i<=n;i++)
{
for(int j=1;j<=sum;j++)
{
dp[i][j]=0;
tmp = j/V[i]; // 取i种的次数
for(int x=0;x<=tmp;x++)
{
dp[i][j] += dp[i-1][j-(x*V[i])];
}
}
}
return dp[n][sum];
}
int main()
{
int sum,n;
cout<<"请输入要兑换零钱的总数"<<endl;
cin>>sum;
cout<<"请输入现有的零钱种类的数目"<<endl;
cin>>n;
cout<<changeMoney(sum,n);
}

最后

以上就是安详芝麻为你收集整理的动态规划解决换硬币问题的全部内容,希望文章能够帮你解决动态规划解决换硬币问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部