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

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

在某谷上跑 没错 挂掉了 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. HaspMap的新奇用法

    HashMap<String, String> map = new HashMap<String,String>(){ private static final long se ...

  2. 再说优化MySQL索引

    这几天开发尤其重视数据库索引的优化,是一件好事情,开发特意提过来几个要删除的索引,oh!我的佛陀呀!历史上出现过因为评估不到位,删索引引发故障的案例.那么有什么办法可以评估索引是否合理呢? perco ...

  3. 多边形游戏(DP)

    Description 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符 "+" 或 "*". ...

  4. KnockoutJS Select 标签 Options绑定

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. [javaSE] IO流(管道流)

    之前我们使用io流,都是需要一个中间数组,管道流可以直接输入流对接输出流,一般和多线程配合使用,当读取流中没数据时会阻塞当前的线程,对其他线程没有影响 定义一个类Read实现Runable接口,实现r ...

  6. 一:Java基础

    /-- 第一章:概念 --/ 1.java特点:跨平台.面向对象.开源 2.JVM是Java虚拟机的缩写,可以实现跨平台 3.java运行原理: 1).编写java源文件,以.java作为后缀名 2) ...

  7. CentOS 安装Parallels Tools

    为了做到Mac和Linux之间共享文件夹,因此需要安装Parallels Tool, 具体安装步骤可以参考 install parallels tool for linux guest http:// ...

  8. C# 后台处理图片的几种方式

    第一种: 将上传图片直接保存到本地 var supportedTypes = new[] { "jpg", "jpeg", "png", & ...

  9. 插件式WebApi服务及自动生成Api帮助文档

    上一篇博客中,讲到了将WebApi Host到控制台和IIS,本篇总结一下如何将WebApi的Service以插件的形式进行动态部署,并设置Hoster的首页显示Api帮助文档,当然,也包括动态部署进 ...

  10. HTML5触摸事件演化tap事件

    触摸事件是移动浏览器特有的HTML5事件,虽然click事件在pc和移动端更通用,但是在移动端会出现300ms延迟,较为影响用户体验,300ms延迟来自判断双击和长按,因为只有默认等待时间结束以确定没 ...