Luogu P1156 垃圾陷阱 DP
f[i][j]表示在第i个垃圾,高度为j的最大生命值
转移分三部分:
如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j-a[i].v]的生命值,则可以垫高度
如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j]的生命值,则可以吃
如果j<当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j]的生命值,则可以吃
什么时候死的:f[i][0]相当于没有垫高度,拿这个状态再把现在的垃圾吃了,可能是最优解,与ans取一个max就好了
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define R register int
using namespace std;
int V,n,ret=0xcfcfcfcf;
int f[][];
struct node{
int t,v,w;
bool operator <(const node& y)const{return t<y.t;}
}a[];
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=(ret<<)+(ret<<)+(ch^); while(isdigit(ch=getchar())); return fix*ret;
}
signed main() {
V=g(),n=g();
for(R i=;i<=n;i++) a[i].t=g(),a[i].w=g(),a[i].v=g();
sort(a+,a+n+);
memset(f,0xcf,sizeof(f));f[][]=;
for(R i=;i<=n;i++)
{
for(R j=V;j>=a[i].v;j--) {
if(f[i-][j-a[i].v]>=a[i].t-a[i-].t) f[i][j]=max(f[i][j],f[i-][j-a[i].v]-(a[i].t-a[i-].t));
if(f[i-][j]>=a[i].t-a[i-].t) f[i][j]=max(f[i][j],f[i-][j]-(a[i].t-a[i-].t)+a[i].w);
if(j==V&&f[i][j]>=) {printf("%d\n",a[i].t);return ;}
}
for(R j=a[i].v-;j>=;j--) if(f[i-][j]>=a[i].t-a[i-].t) f[i][j]=max(f[i][j],f[i-][j]-(a[i].t-a[i-].t)+a[i].w);
ret=max(ret,f[i][]+a[i].t);
}
printf("%d\n",ret);
}
Luogu P1156 垃圾陷阱 DP的更多相关文章
- Luogu P1156 垃圾陷阱 【dp】By cellur925
题目传送门 这题...看上去浓浓的背包气息...但是并不好设计状态啊emmm. 我们考虑可能成为状态的量:高度.血量.时间.物品.看数据范围也猜到应该大概是个二维dp了w. 正确的状态设计之一:设$f ...
- 【luogu P1156 垃圾陷阱】 题解
题目链接:https://www.luogu.org/problemnew/show/P1156 设\(dp[i][j]\)表示前i堆到达高度j时的所活最长时间 那么一旦到当前状态能到达满足的时间和高 ...
- P1156 垃圾陷阱 DP
题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D≤100)英尺. 卡门 ...
- [題解]luogu P1156 垃圾陷阱
前言:[數據刪除] 來源:題解 不發題面了 首先我们来分析题目,“每个垃圾都可以用来吃或堆放”,浓浓的透露出一个背包气息.我们可以类比背包问题的放或不放.于是dp[i][j]dp[i][j]dp[i] ...
- [Luogu] P1156 垃圾陷阱
题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2≤D≤100)英尺. 卡门想把垃圾堆起来,等到堆得与井同样高时 ...
- 洛谷P1156 垃圾陷阱 dp
正解:dp 解题报告: 这儿是传送门! 话说最近怎么神仙们都开始狂刷dp,,,感觉今天写了好多dp的题解的样子?(也就三四道其实× 然后这题,首先看到要么吃要么堆起来就会想到01背包趴?然后就考虑设方 ...
- 【洛谷】P1156 垃圾陷阱【DP】
P1156 垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2≤D≤100)英尺. 卡门想把垃圾堆起来 ...
- 洛谷 P1156 垃圾陷阱
2016-05-31 09:54:03 题目链接 :洛谷 P1156 垃圾陷阱 题目大意: 奶牛掉坑里了,给定坑的深度和方块的个数,每个方块都可以垫脚或者吃掉维持生命(初始为10) 若可以出来,求奶牛 ...
- 【题解】P1156垃圾陷阱
[题解]P1156 垃圾陷阱 乍看此题,我们感觉状态很多,很复杂. 遇到这类型条件比较多的\(dp\),我们不要首先考虑全部设出来,而是要看到这些状态的本质.而在这道题目中,时间和高度就是关键. 考虑 ...
随机推荐
- Stream01 定义、迭代、操作、惰性求值、创建流、并行流、收集器、stream运行机制
1 Stream Stream 是 Java 8 提供的一系列对可迭代元素处理的优化方案,使用 Stream 可以大大减少代码量,提高代码的可读性并且使代码更易并行. 2 迭代 2.1 需求 随机创建 ...
- Django--form生成select标签
需求 Django--form表单中的select生成方法,如果select中的选项不固定,需要怎么操作. 速查 1.固定select选项 forms 1 2 3 class 表单类名称(forms. ...
- Browser
浏览器中关于事件的那点事儿 作者: 顽Shi 发布时间: 2014-02-01 20:22 阅读: 7830 次 推荐: 25 原文链接 [收藏] 摘要:事件在Web前端领域有很重要 ...
- IE8下javascript的时间函数Date()不兼容问题,显示NAN【转】
function parseISO8601(dateStringInRange) { var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/, dat ...
- Jlabel实现内容自动换行
Jlabel实现内容自动换行 摘自:https://blog.csdn.net/zhhtao89/article/details/50179695 2015年12月04日 21:09:27 阅读数 ...
- Reportng 的测试报告在 Jenkins 中显示不全
通过Jenkins执行接口测试生成测试报告,用Jenkins的web服务打开html显示不全. 环境: Jenkins版本:1.651.2 Jenkins发布在mac上面 使用的是testng管理测试 ...
- Python&Django学习系列之-激活管理界面
1.创建你个人的项目与APP 2.填写你的数据库名称与数据库类型,这里使用内置的sqllite3 3.修改setting文件 a.将'django.contrib.admin'加入setting的IN ...
- 【C#】CLR内存那点事(初级)
最近回头看了一下书,对内存的理解又有新的认识.我所关注的内存里面说没有寄存器的,所以我关注的只有 托管堆(heap),栈(stack), 字符串常量池(string是一个很特殊的对象) 首先我们看两个 ...
- WPF 控件库——可拖动选项卡的TabControl
WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...
- NPOI 2.1.3.1导入Excel
引入NPOI 2.1.3.1的包 项目引入 using NPOI.XSSF.UserModel;using NPOI.SS.UserModel; 控制器方法: public ActionResult ...