今天再写一下硬币问题 为什么是再呢

这是个很羞耻的话题 昨天写了一遍硬币

在某谷上跑 没错 挂掉了 TLE MD_SB

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

有很多人说硬币问题是贪心去做

如果你遇到的测试点不呢么毒瘤

例1: 硬币的面值是 1 5 10 要凑出15元 min(硬币个数)

解1:(贪心)每次选最大 min=2

显然是可以得到正确答案的

但是如果硬币的面值是

例2:硬币的面值是 1 5 11 要凑出15元 min(硬币个数)

解2:(贪心)每次选最大 min=5

显然这是错误的 min应该等于3 三个五元

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

所以说 以后我们看到硬币问题的时候

一定不要再深陷于贪心 要多考虑几组测试数据

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DP常规思路:1、设计状态 f(n)为n元需要的最少硬币数

2、写状态转移方程

f(n)= min(f(n-1),f(n-5),f(n-11))+1

但是这题我们要注意一下 不能直接把状态转移方程带入

因为如果n=4 呢n-5,n-11是不是小于零啊

这时候我们加一个中间变量和判断就ojbk了

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

现在我们代码实现一下:

  1. #include<iostream>  
  2. #include<cstdio>  
  3. #define N 2333333   
  4. using namespace std;  
  5. int dp[100010],cost,m;  
  6. int min(int x,int y){  
  7.     return x>=y?y:x;  
  8. }   
  9.     
  10. int main(){  
  11.     scanf("%d",&m);  
  12.     cost=N;  
  13.     dp[0]=0;  
  14.     for(int i=1;i<=m;i++)  
  15.     {  
  16.         dp[i]=N;  
  17.         if(i-1 >= 0) dp[i]=min(dp[i],dp[i-1]+1);  
  18.         if(i-5 >= 0) dp[i]=min(dp[i],dp[i-5]+1);  
  19.         if(i-11 >= 0) dp[i]=min(dp[i],dp[i-11]+1);  
  20.         printf("dp[%d] =%d\n",i,dp[i]);  
  21.     }  
  22. 月5日 10:56   
  23.     return 0;  
  24. }  

[DP]硬币问题的更多相关文章

  1. 关于一些基础的dp——硬币的那些事(dp的基本引入)

    1.最少硬币问题大体题意: 有n种硬币,面值分别是v1,v2......vn,数量无限,输入一个非负整数s,选用硬币使其和为s,要求输出最少的硬币组合. 我们可以这样分析: 定义一个名为Min[s]的 ...

  2. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  3. NYOJ995硬币找零(简单dp)

    /* 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 思路:转换成 ...

  4. TYVJ P1075 硬币游戏 Label:dp

    背景 农民John的牛喜欢玩硬币,所以John就为它们发明了一个新的两人硬币游戏,叫做Xoinc. 描述 最初地面上有一堆n个硬币(5<=n<=2000),从上面数第i个硬币的价值为C_i ...

  5. BZOJ 1042 硬币购物(完全背包+DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1042 题意:给出四种面值的硬币c1,c2,c3,c4.n个询问.每次询问用d1.d2.d ...

  6. tyvj P1075 - 硬币游戏 博弈DP

    P1075 - 硬币游戏 From price    Normal (OI)总时限:10s    内存限制:128MB    代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...

  7. [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】

    题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...

  8. BZOJ 3233: [Ahoi2013]找硬币( dp )

    dp(x)表示最大面值为x时需要的最少硬币数. 枚举x的质因数p,  dp(x) = min( dp(x/p) - (p-1) * sigma[a[i]/x] ). ----------------- ...

  9. UVA 674 Coin Change 换硬币 经典dp入门题

    题意:有1,5,10,25,50五种硬币,给出一个数字,问又几种凑钱的方式能凑出这个数. 经典的dp题...可以递推也可以记忆化搜索... 我个人比较喜欢记忆化搜索,递推不是很熟练. 记忆化搜索:很白 ...

随机推荐

  1. Maven Oracle JDBC

    Oracle的JDBC驱动程序无法从公共仓库下载,你只能手动部署Oracle JDBC驱动程序到本地库.命令如下: mvn install:install-file -Dfile={ORACLE_HO ...

  2. php 截取中文字符串方法

    /** * 截取中文字符串函数 * @param $str 需要截取的字串 * @param $start 开始截取的位置 * @param $length 截取的长度 * @return 此函数返回 ...

  3. IOS仿微信朋友圈好友展示

    前几天小伙伴要帮他做一个群聊功能,里面有好友列表,要求和微信的差不多(见下图),让小伙伴自己实现了下,他将CollectionView放在tableView的tableHead中,可是当添加好友或删除 ...

  4. guava文档API制作成chm文件

    将HTML制作成CHM.EXE需要用到一个小工具“HUGECHM”,将HTML打包成CHM文件 1.下载guava的最新的版本,网址:https://github.com/google/guava/w ...

  5. DataGridView 隔行显示不同的颜色

    两种方法 第一种 DataGridview1.Rows[i].DefultCellStyle.backcolor 第二种 AlternatingRowsDefutCellstyle 属性 获取或设置应 ...

  6. C# 之多线程(二)

    一.确定多线程的结束时间,thread的IsAlive属性 在多个线程运行的背景下,了解线程什么时候结束,什么时候停止是很有必要的. 案例:老和尚念经计时,2本经书,2个和尚念,一人一本,不能撕破,最 ...

  7. 十二、curator recipes之双重屏障DoubleBarrier

    简介 curator实现了单个屏障barrier和双重屏障DoubleBarrier,单个屏障就是在一个进程里面设置了屏障,并等待其它进程去移除这个屏障,否则一直阻塞.双重屏障就是设置了两道屏障,两个 ...

  8. 撩课-Web大前端每天5道面试题-Day2

    1.伪类与伪元素的区别? 1) 定义区别 伪类 伪类用于选择DOM树之外的信息,或是不能用简单选择器进行表示的信息. 前者包含那些匹配指定状态的元素,比如:visited,:active:后者包含那些 ...

  9. code.google.com certificate error: certificate is for www.google.com

    有时候我们会碰到下面错误:code.google.com certificate error: certificate is for www.google.com,类似如下: D:\>go ge ...

  10. delphi之读写文件的三种方式

    一.Tstrings.Tstringlist procedure TForm1.Button2Click(Sender: TObject); var strlist: TStringList; pat ...