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

设\(dp[i][j]\)表示前i堆到达高度j时的所活最长时间
那么一旦到当前状态能到达满足的时间和高度就输出这个垃圾来的时间
转移时先满足可以到达的时间,
再有转移高度:\(dp[i+1][j+a[i+1].h] = dp[i][j] - (a[i+1].t - a[i].t)\)
转移生命值:\(dp[i+1][j] = max(dp[i][j]+a[i+1].f-(a[i+1].t-a[i].t), dp[i+1][j])\)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;
int dp[1010][1010], n, m, d;
struct trash{int t, h, f;
}a[maxn];
bool cmp(trash a, trash b)
{ if(a.t == b.t) return a.h > b.h;return a.t < b.t;
}
int main()
{//freopen("testdata.in","r",stdin);ios::sync_with_stdio(false);//dp[i][j]表示 前i堆能到j高度所活的最长时间 cin>>d>>n;for(int i = 1; i <= n; i++) cin>>a[i].t>>a[i].f>>a[i].h;sort(a+1, a+1+n, cmp);memset(dp, -1, sizeof(dp));dp[0][0] = 10;a[0].t = 0, a[0].f = 0, a[0].h = 0;for(int i = 0; i < n; i++)for(int j = 0; j <= d; j++){if(dp[i][j] < 0) continue;if(dp[i][j] >= a[i+1].t-a[i].t && j + a[i+1].h >= d) {cout<<a[i+1].t; return 0;}if(dp[i][j] >= a[i+1].t-a[i].t) dp[i+1][j+a[i+1].h] = dp[i][j]-a[i+1].t+a[i].t;if(dp[i][j] >= a[i+1].t-a[i].t) dp[i+1][j] = max(dp[i][j]+a[i+1].f-(a[i+1].t-a[i].t), dp[i+1][j]);}int now = 10;for(int i = 1; i <= n; i++){if(a[i].t - a[i-1].t > now) {printf("%d",now+a[i-1].t); return 0;}if(a[i].t - a[i-1].t <= now) {now += a[i].f; now = now - (a[i].t - a[i-1].t);}}cout<<a[n].t+now;return 0;
}

转载于:https://www.cnblogs.com/MisakaAzusa/p/9808685.html

【luogu P1156 垃圾陷阱】 题解相关推荐

  1. 洛谷P1156 垃圾陷阱 题解浅谈刷表法与填表法

    洛谷P1156 垃圾陷阱 题解&浅谈刷表法与填表法 填表法 :就是一般的动态规划,当前点的状态,可以直接用状态方程,根据之前点的状态推导出来. 刷表法:由当前点的状态,更新其他点的状态.需要注 ...

  2. 【题解】luogu p1156 垃圾陷阱

    背包 总结: 1.状态要根据问的问题设计,一开始我设计dp[i]是在i时间时的最高高度,而题目卡门最长可以活多久,这样设计的话若不能出去,则这个不好判断.所以设计为dp[i]是在i的高度时,卡门最多可 ...

  3. luogu P1156 垃圾陷阱

    原题链接:https://www.luogu.org/problem/show?pid=1156 经历了一次CE,两次WA 45,一次WA 91,终于A掉了此题. f[i][j]表示前i个物品堆成j高 ...

  4. 【每日DP】day 9、P1156 垃圾陷阱(神奇的背包,时间节点处理)难度⭐⭐⭐

    P1156 垃圾陷阱 每个垃圾只能用一次,典型的01背包. 关键是时间的处理 ll f[N];题目要中求的是生存的最长时间,所以这里的f[i]是指高度i时生存的最长时间 对于每一块垃圾,我们都有两种选 ...

  5. P1156 垃圾陷阱

    我是真的不知道... 这道题对于每一个垃圾有两个决策:堆放不吃 或者 吃掉不堆放. 终止条件是堆放的高度达到\(d\).想要求达到状态的最大生命值或者最久能活到多久. 可以联想到背包问题,而且是01背 ...

  6. [洛谷P1156][codevs1684]垃圾陷阱

    题目大意:一头奶牛掉进了深度为d的坑里,现在有g个垃圾在特定时刻ti扔进来.奶牛可以吃垃圾以获得体力,吃第i个垃圾能获得mi的体力,也可以堆放垃圾以逃生,第i个垃圾高度为hi.当高度≥d时奶牛成功逃生 ...

  7. 【luogu P5022 旅行】 题解

    题目连接:https://www.luogu.org/problemnew/show/P5022 \(NOIP2018 DAY2T1\) 考场上只写了60分,很容易想到当 m = n - 1 时的树的 ...

  8. Luogu P2708 硬币翻转 题解

    Luogu p2708题解 思路: 由于我们这个题目的长度不知道,所以我们不能一次性输入所有的硬币的状态,也许会爆数组(Ps:我没试过我不是知道).所以我们为了保险采取用getchar()一个一个读入 ...

  9. 【luogu P2169 正则表达式】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2169 tarjan缩点 + SPFA 缩完点之后加边注意别写错. 也可以不用建两个图,可以在一张图上判断是否 ...

  10. 【luogu P3959 宝藏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3959 我只是心血来潮想学SA(考场上骗分总行吧). 这个题可以状压DP.爆搜+剪枝.有意思的还是随机化搜索( ...

最新文章

  1. 使用Github进行多人协作,项目管理
  2. python 自定义词典_pyhanlp用户自定义词典添加
  3. 《数字图像处理》冈萨雷斯学习笔记3:频域处理
  4. 联发科mtk和骁龙730哪个好_不惧高通挑战!联发科G90芯片发布,强势干翻骁龙730...
  5. 【华为云技术分享】解密如何使用昇腾AI计算解决方案构建业务引擎
  6. java的JVM与垃圾回收机制
  7. matlab画图函数汇总(二)
  8. php 获取xlsx,使用php读取xlsx文件
  9. coreldraw x5安装视频教程_图形设计必备软件:CorelDRAW
  10. Windows 连接 手机Termux 无需root 详细教程【橘小白】
  11. Anomaly Detection with Partially Observed Anomalies译文
  12. 回溯法-符号三角形问题
  13. 从零开始使用IDEA创建JAVAWEB工程
  14. ggplot2 annotate()函数
  15. 云计算平台包含哪些?是如何划分的?
  16. Js的Mixin 模式
  17. 视频聊天网站的技术与发展
  18. 工作迷茫,想换工作了!
  19. word文本恢复转换器
  20. 新学期,在这里写下我人生的新规划

热门文章

  1. Nginx 这一牛X的功能,你知道吗
  2. 为什么我推荐你立刻使用Java 8 Stream?性能逆天了
  3. IT 已成为最疯狂的加班行业,没有之一
  4. vim中 E212:无法打开并写入文件的解决办法
  5. 虚拟机克隆后没有IP
  6. django -- 分页功能
  7. webService(一)开篇
  8. C#如何获取物理网卡,虚拟网卡,以及无线网卡
  9. mac Sourcetree 账号密码输入错误后, 重新输入的方法
  10. HDU 4746 Mophues(莫比乌斯反演)题解