题目https://www.luogu.org/problemnew/show/P1156

题意:

每一个垃圾投放时间是t,可以堆的高度是h,如果吃掉可以增加的生命值是f。

给定g个垃圾,初始生命值是10,要求如果要爬出深度为d的井的最早时间是多少。如果爬不出去,最多的生存时间是多少。

思路:

有几个状态,时间,高度,生命值,第几个垃圾。

时间显然是垃圾投入时就马上进行处理,所以这个应该不会是一维状态。

而一个垃圾只有两种状态,堆起来或者是吃掉,看起来就很像背包。

于是刚开始考虑的是用dp[i][j]表示处理前i个垃圾,剩余生命力是j的时候的最大高度。

但是这样j的取值范围并不是很好确定。

那么考虑用dp[i][j]表示处理前i个垃圾,当前高度是j时的最大生命力。

转移方程:dp[i][j] = max(dp[i-1][j-trash[i].h], dp[i-1][j]+trash[i].f)

要注意判断这个状态是不是可达的,也就是说生命力值是否超过了垃圾投入时间。

然后扫一遍得到答案。

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
#include<iostream> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<string, string> pr; int d, n;
const int maxn = ;
struct node{
int t, f, h;
}trash[maxn];
int dp[maxn][]; bool cmp(node a, node b)
{
return a.t < b.t;
} int main()
{
scanf("%d%d", &d, &n);
for(int i = ; i <= n; i++){
scanf("%d%d%d", &trash[i].t, &trash[i].f, &trash[i].h);
}
sort(trash + , trash + + n, cmp);
//memset(dp, -1, sizeof(dp));
dp[][] = ; int ans = , mxtime;
for(int i = ; i <= n; i++){
for(int j = ; j <= d; j++){
//if(dp[i][j] < 0)continue;
if(dp[i - ][j] >= trash[i].t)dp[i][j] = max(dp[i][j], dp[i - ][j] + trash[i].f);
if(j >= trash[i].h && dp[i - ][j - trash[i].h] >= trash[i].t) dp[i][j] = max(dp[i - ][j - trash[i].h], dp[i][j]);
//mxtime = max(dp[i][j], mxtime);
} }
int maxh=, maxt=;
int i;
for(i=;i<=n;i++)
{
for(int j=;j<=d;j++)
{
if(dp[i][j]-trash[i].t>=)
maxh=max(maxh,j);
maxt=max(maxt,dp[i][j]);
}
if(maxh==d)
break;
}
if(maxh==d)
cout<<trash[i].t<<endl;
else
cout<<maxt<<endl; return ;
}

洛谷P1156 垃圾陷阱【线性dp】的更多相关文章

  1. 洛谷P1156 垃圾陷阱[背包DP]

    题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想把垃圾堆起来,等到 ...

  2. 洛谷 P1156 垃圾陷阱

    2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...

  3. 洛谷——P1156 垃圾陷阱

    P1156 垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D ...

  4. 洛谷 P1156 垃圾陷阱 (01背包拓展)(好题!!)

    这真是一道好题目 学到了很多 一开始感觉吃或者不吃会有后效性 然后看到洛谷的题解,直接把这个有后效性的部分当作dp的维度和值 因为这个垃圾可以堆或者不堆,所以这个很像01背包, 但是加了非常多的限制条 ...

  5. 洛谷P1156 垃圾陷阱 dp

    正解:dp 解题报告: 这儿是传送门! 话说最近怎么神仙们都开始狂刷dp,,,感觉今天写了好多dp的题解的样子?(也就三四道其实× 然后这题,首先看到要么吃要么堆起来就会想到01背包趴?然后就考虑设方 ...

  6. 洛谷P1156 垃圾陷阱

    动规仍然是难关啊 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想 ...

  7. 洛谷 P1156 垃圾陷阱 谈论剪枝,非满分

    这是一个91分的非dp代码(是我太弱) 剪枝八五个(实际上根本没那么多,主要是上课装逼,没想到他们dp水过去了),不过我的思路与dp不同: 1.层数到达i+1,return 这个必须有 2.当前剩余生 ...

  8. 洛谷 P1156 垃圾陷阱 题解

    题目传送门 dp+排序+01背包 就完事了??? 貌似就是这样的 代码: //dp 排序 01背包 #include<iostream> #include<cstdio> #i ...

  9. [洛谷1156]垃圾陷阱(DP)

    [Luogu1156] f[i]表示高度为i时的存活时间 Code #include <cstdio> #include <algorithm> #define N 110 u ...

随机推荐

  1. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  2. Android使用glide加载.9图片的方法

    我们在开发过程中会经常使用.9图片, 因为它可以使图片拉伸的时候,保证其不会失真. 而我们把.9图片放在服务器端,通过glide直接加载,会报错. 我们的解决方法是 通过sdk的aapt工具 把.9图 ...

  3. html当中如何引用js文件

    3)html当中如何引用js文件 如果需要javascript工程师和html美工各干各的工作,需要分开写文件. 例 1.2 <html><head>    <scrip ...

  4. JDBC 资源绑定器 ,处理查询结果集

    使用资源绑定器绑定属性配置 实际开发中不建议把连接数据库的信息写死到Java程序中 //使用资源绑定器绑定属性配置 ResourceBundle bundle = ResourceBundle.get ...

  5. dede按照权重排序dede:list和得的:arclist

    dede:list 的方法 1.找到"根目录\include\arc.listview.class.php"文件. 2.修改代码:在文件第727行处添加按weight排序判断代码( ...

  6. redis集群搭建及一些问题

    redis 1.简化版redis (本套Redis集群为简化版安装部署,只需解压至普通用户家目录下或者任意目录,解压后修改脚本,执行脚本后即可使用.) 注意,此版本需要在redis配置文件中添加 pr ...

  7. S03_CH04_AXI_DMA_OV5640摄像头采集系统

    S03_CH04_AXI_DMA_OV5640摄像头采集系统 4.1概述 本课程讲解如何搭建基于DMA的图形系统,方案原理和搭建7725的一样,只是OV5640显示的分辨率是1280X720如下,只是 ...

  8. 排序之希尔排序(JS)

    希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该 ...

  9. .Net C# RSA签名和验签

    帮助类 using System; using System.Text; using System.IO; using System.Security.Cryptography; namespace ...

  10. winfrom_动态添加按钮button(设置颜色,大小,按钮字体大小、颜色,位置,事件)

    List<string> strColor = new List<string>(); strColor.Add("#e67817"); strColor. ...