【题解】Grape luogu1156改 dp
考试时被数据坑了
题目
原题 传送门
题目描述:
众所周知的是oyyf 沉迷葡萄,今天的oyyf为了葡萄溜到了He 大佬家的葡萄园偷葡萄,
可惜的是还没偷到葡萄He 大佬就来葡萄园了,吓的oyyf 直接跳进了He 大佬挖的地洞里
面,地洞里全是粉红女装,oyyf 分分钟的想要离开这里。
古人云“非极必欧”,He 大佬靠在葡萄架上摇摆,慢慢掉下了D 颗的炒鸡巨大的葡萄,
恰巧oyyf 又是众人皆知的轻盈,所以oyyf 可以把葡萄堆起来然后爬出去!但是oyyf 意识
到自己在爬葡萄的期间是会饿的,每单位时间里oyyf 的HP 会下降一点,如果oyyf 的HP
下降到零,那么oyyf 此时就要饿死在地下室里然后被He 大佬吊起来打了,于是oyyf 可以
选择在第i 个葡萄掉下来的时候吃掉它获得j 点HP。
所以oyyf 需要你来解决一个问题,她最快需要多少单位时间才能离开这个充满粉红女
装的地洞,然而如果她注定和葡萄们命丧于此,她最久能活久呢
输入格式
第一行为三个正整数D(地洞的高度),O(一共会掉下的葡萄数)
接下来G 行每行为三个正整数Ti(第i 个葡萄落下的时间),Xi(吃掉第i 个葡萄能获得的
HP),Hi(第i 个葡萄的高度)
输出格式
如果能够溜出去,输出一个正整数N 代表最短时间
如果不能溜出去,输出两行,第一行为“OYYF ZU”,第二行为一个正整数M 代表存
活的最长时间
样例
.in
20 3 10
3 4 10
4 5 20
5 4 10
.out
4
数据范围
对于40%的数据 1<=O<=40
对于100%的数据 1<=O<=1000,0<=Ti<=1000, 0<=Xi<=100,0<=Hi<=100
思路
DP 难度并不高……是各位大佬被彼此的题play 了后,使人心情愉悦的一道DP
对于f[i][j]记录在使用了第i 个葡萄达到高度为j 的时候剩余的HP
转移
- 选择吃掉的时候,f[i][j]=f[i-1][j]减去i-1 到i 的消耗再加上吃掉i 得到的HP
- 选择搭的时候,f[i][j]=f[i-1][j-a[i].h]减去i-1 到i 的消耗
若达到了高度要求那么就可以直接输出答案
否则就是输出目前的HP 最大值
(↑需要排序优化保证最优值,所以只要用葡萄作为最外层循环就可以保证第一个满
足的就是最早的时候啦)
注意点
- 排序是前提极
- 注意转移的时候要考虑高度大于0 和HP 大小
- 搜索是有分的恩
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,g,anst=10,xd=0;
int f[1005][2505];
struct tree {
int t,hp,h;
} a[1005];
inline int read(){
int x=0,w=1;char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='0') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch-48),ch=getchar();
return x*w;
}
int cmp(tree a,tree b) {
return a.t<b.t;
}
int main() {
//freopen("grape.in","r",stdin);
//freopen("grape.out","w",stdout);
scanf("%d%d%d",&n,&m,&g);
n=read();m=read();g=read();
for (int i=1; i<=m; i++) {
a[i].t=read();
a[i].hp=read();
a[i].h=read();
scanf("%d%d%d",&a[i].t,&a[i].hp,&a[i].h);
xd+=a[i].h;
}
sort(a+1,a+m+1,cmp);
int pos=0;
memset(f,-0x3f,sizeof(f));
f[pos][0]=g;
register int i,j;
for (i=1; i<=m; i++)
for (j=0; j<=n; j++) {
if(f[i-1][j]-(a[i].t-a[i-1].t)>=0)
f[i][j]=max(f[i][j],f[i-1][j]-(a[i].t-a[i-1].t)+a[i].hp);
if(f[i-1][j-a[i].h]-(a[i].t-a[i-1].t)>=0&&j-a[i].h>=0) {
f[i][j]=max(f[i][j],f[i-1][j-a[i].h]-(a[i].t-a[i-1].t));
if(j==n) {
printf("%d",a[i].t);
return 0;
}
}
anst=max(anst,f[i][j]+a[i].t);
}
printf("OYYF ZU\n");
printf("%d",anst);
return 0;
}
【题解】Grape luogu1156改 dp的更多相关文章
- 【题解】POJ1934 Trip (DP+记录方案)
[题解]POJ1934 Trip (DP+记录方案) 题意: 传送门 刚开始我是这么设状态的(谁叫我DP没学好) \(dp(i,j)\)表示钦定选择\(i\)和\(j\)的LCS,然而你会发现这样钦定 ...
- 【题解】剪纸条(dp)
[题解]剪纸条(dp) HRBUST - 1828 网上搜不到题解?那我就来写一篇吧哈哈哈 最优化问题先考虑\(dp\),设\(dp(i)\)表示将前\(i\)个字符(包括\(i\))分割成不相交的回 ...
- 【题解】地精部落(DP)
[题解]地精部落(DP) 设\(f_i\)表示强制第一个是谷的合法方案数 转移枚举一个排列的最大值在哪里,就把序列分成了互不相干的两个部分,把其中\(i-1\choose j-1\)的数字分配给前面部 ...
- bzoj 2669 题解(状压dp+搜索+容斥原理)
这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...
- 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题
主要讲第五课的内容前缀树应用和第六课内容暴力递归改动态规划的最全步骤 第一题 给定一个数组,求子数组的最大异或和. 一个数组的异或和为,数组中所有的数异或起来的结果. 简单的前缀树应用 暴力方法: 先 ...
- 理想乡题解 (线段树优化dp)
题面 思路概述 首先,不难想到本题可以用动态规划来解,这里就省略是如何想到动态规划的了. 转移方程 f[i]=min(f[j]+1)(max(i-m,0)<=j<i 且j符合士兵限定) 注 ...
- CF 1400F x-prime Substrings 题解【AC自动机+DP】
CF 1400F.x-prime Substrings 题意: 给定一个由\('1'\)到\('9'\)组成的字符串\(s\)和一个数\(x\),定义一个串为\(x-prime\)串,当且仅当这个串上 ...
- BZOJ 1087 题解【状压DP】
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3112 Solved: 1816[Submit][ ...
- LeetCode题解——Unique Path(DP与优化)
题目:A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). ...
随机推荐
- Vulnerability: Cross Site Request Forgery (CSRF)
CSRF跨站请求伪造 这是一种网络攻击方式,也被称为one-click attack或者session riding 攻击原理 CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web ...
- 数据库调优(二)Inner Join Merge Join Hash Match
T-SQL 的编码习惯以及规范,影响的是查询优化器对执行计划的选择 健壮的SQL语句,更稳定.更高效 SELECT 几个部分: - 查询的数据来自什么表 - 需要查询表中哪些字段 (尽量不使用类似于 ...
- 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享!|JavaGuide|Guide哥
这是一篇来自算法转Java后端的一位读者的投稿!文章主要分享了作者从迷茫崩溃到最终斩获腾讯.京东.百度等大厂 offer 的经历.文章内容很全面.真实,相信可以对正在准备面试的小伙伴有帮助! 看到公众 ...
- computed和watch的区别
严格上来说,计算属性能够实现的效果,watch都可以实现.只是有时候watch写起来比较麻烦. 但是watch能够实现的效果computed不一定能够实现. 1:watch内部可以包含异步操作,com ...
- 痞子衡嵌入式:MCUBootUtility v3.3发布,可配合SBL项目使用
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v3.0.0)发布过去4个多月了,期间痞子衡其实断断续续做个几个小版本更新,这一次痞子衡为大家带来了稳定版本v3.3.0,顺 ...
- 技能Get·Windows10将任何格式文件固定到开始屏幕
阅文时长 | 0.6分钟 字数统计 | 960.8字符 主要内容 | 1.引言&背景 2.将文件加入到应用列表中 3.修改注册表法 4.声明与参考资料 『技能Get·Windows10将任何格 ...
- UltraISO制作启动盘安装CentOS7
UltraISO制作启动盘安装CentOS7 发表于 2020-03-10 | 分类于 DevOps | 没有评论 简单几个步骤即可完成启动盘的制作,非常便利 准备工具 准备8G优盘(启动盘制 ...
- Ansible命令行方式执行
Ansible ad-hoc 什么是ad-hoc? 临时命令,执行完不会保存,类似于批量执行命令. ansible的选项 -i # 指定主机清单 ansible rsync -m ping -i 1. ...
- 【Java】Jackson解析xml的坑
为了获取xml数据,在spring mvc中针对 @ResponseBody配置了jackson. 刚用的时候内心是狂喜的,终于不用自己解析了---- but----------还是有坑的-- 坑一 ...
- Centos7.4永久修改系统时间
[root@V3B01-zsy yum.repos.d]# date -s "2019-09-24 17:02:30" 2019年 09月 24日 星期二 17:02:30 CST ...