洛谷P1156 垃圾陷阱【线性dp】
题目: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】的更多相关文章
- 洛谷P1156 垃圾陷阱[背包DP]
		
题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想把垃圾堆起来,等到 ...
 - 洛谷 P1156 垃圾陷阱
		
2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...
 - 洛谷——P1156 垃圾陷阱
		
P1156 垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D ...
 - 洛谷 P1156 垃圾陷阱 (01背包拓展)(好题!!)
		
这真是一道好题目 学到了很多 一开始感觉吃或者不吃会有后效性 然后看到洛谷的题解,直接把这个有后效性的部分当作dp的维度和值 因为这个垃圾可以堆或者不堆,所以这个很像01背包, 但是加了非常多的限制条 ...
 - 洛谷P1156 垃圾陷阱 dp
		
正解:dp 解题报告: 这儿是传送门! 话说最近怎么神仙们都开始狂刷dp,,,感觉今天写了好多dp的题解的样子?(也就三四道其实× 然后这题,首先看到要么吃要么堆起来就会想到01背包趴?然后就考虑设方 ...
 - 洛谷P1156 垃圾陷阱
		
动规仍然是难关啊 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2<=D<=100)英尺. 卡门想 ...
 - 洛谷 P1156 垃圾陷阱 谈论剪枝,非满分
		
这是一个91分的非dp代码(是我太弱) 剪枝八五个(实际上根本没那么多,主要是上课装逼,没想到他们dp水过去了),不过我的思路与dp不同: 1.层数到达i+1,return 这个必须有 2.当前剩余生 ...
 - 洛谷 P1156 垃圾陷阱 题解
		
题目传送门 dp+排序+01背包 就完事了??? 貌似就是这样的 代码: //dp 排序 01背包 #include<iostream> #include<cstdio> #i ...
 - [洛谷1156]垃圾陷阱(DP)
		
[Luogu1156] f[i]表示高度为i时的存活时间 Code #include <cstdio> #include <algorithm> #define N 110 u ...
 
随机推荐
- hdoj3534(树形dp,求树的直径的条数)
			
题目链接:https://vjudge.net/problem/HDU-3534 题意:给出一棵树,求树上最长距离(直径),以及这样的距离的条数. 思路:如果只求直径,用两次dfs即可.但是现在要求最 ...
 - C++11 thread condition_variable mutex 综合使用
			
#include <mutex> #include <condition_variable> #include <chrono> #include <thre ...
 - redis通用命令
			
1.keys pattern 含义:查找所有符合给定模式(pattern)的key keys * 遍历所有key keys he[h-l]* 遍历以he开头,第三个字符为h-l之间的所有key key ...
 - jQuery报错:Uncaught TypeError: _this.attr is not a function
			
问题:想通过延时把置灰的按钮再次复原,代码如下: $("#sendEmailCode").on("click", function() { var _this ...
 - pycharm配置git版本管理
			
1.下载并安装git 首先你电脑必须安装git版本控制器(软件),在官网下载即可 2.安装git,正常安装即可 编缉器的选择,根据电脑实际情况选择合适的编缉器 安装参考:https://www.cnb ...
 - # localhost 、217.0.0.1 、本机IP
			
localhost .217.0.0.1 .本机IP localhost是一个域名,性质跟 "www.baidu.com" 差不多,指向127.0.0.1这个IP地址,在windo ...
 - jupyter lab 安装
			
在windows下安装jupyter 特别简单 首先你需要有Anaconda or python的环境变量,这里我就不说怎么安装环境变量了,网上一大堆教程 启动黑窗口,下载jupyter pip in ...
 - ORC相关的库介绍和应用
			
将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR) OCR库:Pillow.Tesseract.NumPy Pillow Pillow可以对图 ...
 - 一个复杂关联的sql
			
在项目中遇到了一个比较复杂关系的sql,关联关系有些模糊,现在梳理一下 sql如下: SELECT TRAN.TRANS_DATE, TRAN.TRANS_TIME, TRAN.BUSI_TRAC_C ...
 - eventFlow 系列 <一> 入门
			
var exampleId = ExampleId.New; var commandBus = resolver.Resolve<ICommandBus>(); ,) var execut ...