【题解】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). ...
随机推荐
- @Aspect 注解使用详解
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...
- php中的一些碎的知识点
PHP函数之可变函数,即可以通过变量的名字来调用函数,因为变量的值是可变的,所以可以通过改变一个变量来调用不同的函数 例如 function name(){ echo "name&q ...
- 使用alpine为基础镜像Q&A
作为go应用存在二进制文件却不能执行 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file 或 standard_init_linux.go:211: ex ...
- GCC链接时库顺序问题
GCC或G++在编译链接时,如果命令行中含有库,则要特别注意了.根据<C专家编程>5.3节中的提示,GCC在链接时对命令行时的处理顺序是从左到右.证据是GCC的MAN: -l librar ...
- ltp日志
grep "fail" -i /var/log/messages |wc -lgrep "fail" -i /var/log/messagesgrep &quo ...
- Gtkperf介绍
Gtkperf使用说明一.Gtkperf介绍GtkPerf是一种应用程序设计,测试基于GTK +的性能.问题的关键是建立共同的测试平台,运行预先基于GTK +工具(开放comboboxes ,切换按钮 ...
- windows怎么访问linux的samba共享目录
windows怎么访问linux的samba共享目录 听语音 原创 | 浏览:6976 | 更新:2018-07-31 13:20 | 标签:LINUX WINDOWS 1 2 3 4 5 6 7 分 ...
- OpenStack neutron vlan 模式下的网络包流向
时间:2015-01-15 18:09:41 1.什么是Neutron? Neutron是OpenStack的network project ,是NaaS(networking-as-a-servic ...
- Boa Web Server 缺陷报告及其修正方法
综述 Boa 作为一种轻巧实用的 WEB 服务器广泛应用于嵌入式设备上, 但 Boa 对实现动态网页的 CGI 的支持上仍存在一些缺陷, 本文描述了 Boa 对 CGI 的 Status/Locat ...
- WebConfig配置,添加静态资源,外部可以直接访问地址
此配置是处理springboot拦截静态文件的 代码如下: @Configuration public class WebMvcConfig implements WebMvcConfigurer { ...