首页 > 其他 > 详细

最少硬币问题(动态规划)

时间:2020-03-31 17:33:13      阅读:67      评论:0      收藏:0      [点我收藏+]

有多个不同面值的硬币,任意找,输入金额S,输出最少硬币数。

列如:有1,3,5三种面值的硬币,我有9元钱,能兑换的硬币数最少是多少枚?5+3+1=9,最少兑换三枚。

0元兑换0个,

1元兑换1个,

2元兑换2个,在1元的基础上加一个,

3元兑换1个,

4元兑换2个,4-3=1元,在3元的基础上加一个,

依次类推,所以提炼出动态转移方程;Min[i]=min(Min[i],Min[i-face[j]]+1),1<=i<=s,Min[i]保存i元兑换最少硬币数,face[j]表示硬币面值,初始化时将Min[i]初始化一个较大的数,Min[0]=0。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int inf=0x3f3f3f3f;
 5 const int maxn=1e3;
 6 int Min[maxn];
 7 int face[3]={1,3,5};
 8 int main()
 9 {
10     int s;
11     while(cin>>s)
12     {
13         for(int i=1;i<=s;i++)
14         {
15             Min[i]=inf;//初始化最大值;Min[0]还是为0; 
16         }
17         for(int i=1;i<=s;i++)
18         {
19             for(int j=0;j<3;j++)
20             {
21                 if(face[j]<=i)
22                     Min[i]=min(Min[i],Min[i-face[j]]+1);
23             }
24         }
25         cout<<Min[s]<<endl;
26     }
27     return 0;
28 }
29  

 

最少硬币问题(动态规划)

原文:https://www.cnblogs.com/yzlzm/p/12606498.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!