硬币问题

原创 2016年08月30日 16:03:28

硬币问题:有n中硬币,面值分辨为 v1,v2,v3...vn.每种都有无限多个。给定非负整数S,可以选用多少个硬币使得面值之和为S?输出硬币数目的最大值和最小值。

问题分析:固定终点的最长路问题。用图来建模,如果s大于vi,则s到vi有一条边。

  初步代码:

     d(i)表示从结点i到0的最长路

int dp(int s){

int & ans=d[s];

if(ans>=0)  return ans;

ans =0;

for(int i=1;i<=n;i++) if(s>=0v{i}) ans=max(ans,dp(s-v[i])+1);

return ans;

}


初步代码存在着一个致命的错误,s不一定能真的到达0.所以我们可以将ans初始化的值变为-1,若没计算过则先赋值为-INF,所以当s无法到达0的路线,我们直接加上一个负无穷小的数,默认为放弃。


最终代码为:


int dp(int s){

int & ans=d[s];

if(ans!=-1) return ans;

ans=-INF;

for(int i=1;i<=n;i++) if(s>=v[i])  ans=max(ans,dp(s-v[i])+1);

return ans;   //无法到达这返回一个很小的值,相当于放弃

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

动态规划入门之硬币问题

动态规划算法通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式时间复杂度, 因此它比回溯法、暴力法等要快许多。...
  • kerryfish
  • kerryfish
  • 2014年05月11日 23:14
  • 14431

动态规划——最少硬币问题

之前我在动态规划(dynamic programming)原理抛出了一个最少硬币问题。接下来,在这篇文章,我们将会对硬币问题进行一个全面的解析,并尽可能的解释动态规划的原理,希望读者们可以通过这个问题...
  • q623702748
  • q623702748
  • 2016年05月02日 20:06
  • 3750

背包问题,硬币问题

至少有4种背包问题:1)01背包,
  • binling
  • binling
  • 2014年10月02日 14:36
  • 559

最少硬币找零问题-动态规划

动态规划把问题分为子为题,解决了这些子问题,再把子问题合并起来,便可以得到问题的解。在解决子问题过程中,需要把子问题的解保存起来方便后面使用。 最少硬币找零问题为:给予不同面值的硬币若干种种(每...
  • M771310443
  • M771310443
  • 2015年12月05日 19:05
  • 1763

程序设计:贪心算法解决硬币问题

硬币问题问题描述: 有1元、5元、10元、50元、100元、500元的硬币各C1,C5,C10,C50,C100,C500枚。现在要用这些硬币来支付A元,最少需要多少枚硬币?假设本题至少存在一种支付...
  • qq_33026143
  • qq_33026143
  • 2016年11月08日 00:11
  • 682

【机器学习系列】EM算法求解三硬币问题(python版本)

三硬币模型 假设有3枚硬币,分别记作A,B,C。这些硬币正面出现的概率分别为π,p和q。投币实验如下,先投A,如果A是正面,即A=1,那么选择投B;A=0,投C。最后,如果B或者C是正面,那么y=1;...
  • piaoxuefengqi
  • piaoxuefengqi
  • 2014年02月26日 18:54
  • 3407

入门经典--硬币问题dp递归加递推

#include #include #include using namespace std; int v[101],s,n,mini[10001],maxn[10001],visi[1000...
  • qq_33312212
  • qq_33312212
  • 2016年08月22日 17:59
  • 345

硬币面值组合的算法题解

方法一 转自http://www.cnblogs.com/python27/archive/2013/09/05/3303721.html 动态规划的方法,是将m*n(m表示硬币的种类,n表示所要组...
  • styyzxjq2009
  • styyzxjq2009
  • 2014年07月16日 16:59
  • 3774

EM算法学习笔记与三硬币模型推导

最近接触了pLSA模型,由于该模型中引入了主题作为隐变量,所以需要使用期望最大化(Expectation Maximization)算法求解。       本文简述了以下内容:      ...
  • AnneQiQi
  • AnneQiQi
  • 2017年03月21日 12:45
  • 1488

POJ1013 称硬币

有12枚硬币。其中有11枚真币和1枚假币。假币和真 币重量不同,但不知道假币比真币轻还是重。现在, 用一架天平称了这些币三次,告诉你称的结果,请你 找出假币并且确定假币是轻是重(数据保证一定能找 出来...
  • qq_30091945
  • qq_30091945
  • 2017年02月16日 14:32
  • 343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:硬币问题
举报原因:
原因补充:

(最多只允许输入30个字)