The Last Stand

The Last Stand

https://ac.nowcoder.com/acm/contest/303/L

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 262144K,其他语言524288K

64bit IO Format: %lld

题目描述

tokitsukaze玩到了星际争霸2(StarCraftⅡ)自由之翼的最后一关战役:背水一战(The Last Stand)。

雷诺(Raynor)费劲千辛万苦终于找到了刀锋女王凯瑞甘(Kerrigan),这时候雷诺收集齐了塞尔纳加上古神器。上古神器组装后可以净化被异虫感染的人类。

刀锋女王一开始位于坐标原点,她的初始生命为h,她要进攻位于m处的人类基地。

在进攻的过程中刀锋女王会选择触发一些事件来强化自身,但是因为受到塞尔纳加上古神器的影响,这些事件发生了反转,所以不一定都会给刀锋女王带来强化。

刀锋女王在进攻的过程中会路过n个事件的触发地,其中第i个事件的触发地点为pos[i]。当触发这个事件时,会立刻将刀锋女王的生命值变为H+val[i],H为触发事件时刀锋女王的生命值,注意val[i]的值可能为正也可能为负。触发这个事件的同时,还会给刀锋女王添加一个buff。

为了简化问题,我们认为刀锋女王身上最多只能存在一个buff,也就是后来的buff会覆盖掉之前的buff效果,该buff会持续的改变刀锋女王的生命值,当刀锋女王身上存在buff时,她每往前走一个单位,她的生命值都会变为H+delta[i],H为刀锋女王往前走一个单位前的生命值,注意delta[i]可能为正值,也可能为负值。我们认为一开始刀锋女王身上不具有任何的buff效果。

刀锋女王在路过某个事件的触发地时,她可以选择触发这个事件或者跳过不触发这个事件。不过聪明的刀锋女王总是会选择最优策略,这使她到达人族基地时拥有最多的生命值。

当刀锋女王的生命值小于等于0时,她就会死亡,在保证刀锋女王必须存活的条件下。她到达人族基地时的最大生命值是多少?(假设她的生命值上限无限大的前提下)

输入描述:

第一行输入一个正整数T(1≤T≤30),表示有T组数据。

对于每组案例:

第一行输入三个正整数n,m,h(1≤n≤1000,1≤m≤10^9,1≤h≤10^9)分别表示有n个事件的触发地,刀锋女王要进攻位于m处的人族基地,刀锋女王的初始生命h。

接下来n行每行输入三个正整数pos[i],val[i],delta[i](1≤pos[i]<m ,-10^9≤val[i],delta[i]≤10^9),分别表示第i个事件的触发地为pos[i],如果刀锋女王触发该事件的话,会立刻改变她的生命val[i]点,并且会改变自身buff的状态,之后每往前走一步都会改变她的生命值delta[i]点。

输入保证这n个事件的触发地pos[i]是按照递增顺序输入的,并且pos[i]互不相同。

输出描述:

对于每组数据,请输出一行一个正整数表示刀锋女王在选择最优策略的情况下到达人族基地时自身生命的最大值。

示例1

输入

4
3 5 1
1 -1 100000
2 200 -100
3 -100 2
4 10 1
1 -1 100
2 50 -10
4 -15 3
5 -20 5
4 100 1
1 -1 100
2 50 -10
4 -15 3
5 -20 5
1 1000000000 1
1 900000000 -1

输出

5
34
476
1

说明

第一组样例:

当刀锋女王走到1位置时如果选择触发事件就会立刻失去1点生命而导致死亡,所以她不能触发事件1。

之后刀锋女王走到位置2,她选择触发事件,她先获得200点生命值,所以当前生命值变为201,并且身上获得了一个每走一步生命减少100点的debuff。

刀锋女王走到位置3时由于debuff的效果生命减少100点变为101,之后她选择触发位置3上的事件,生命值先减少100点变为1,并且身上获得了一个每走一步生命值增加2的buff效果,并且该效果覆盖掉了之前的debuff。

刀锋女王从位置3走到位置4,触发一次buff效果,当前生命变为3。

刀锋女王从位置4走到位置5,再次触发buff效果,当前生命变为5。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<queue>
 7 #include<stack>
 8 #include<cstdio>
 9 #include<vector>
10 typedef long long ll;
11 using namespace std;
12
13 struct sair{
14     ll pos,val,delta;
15 }a[1005];
16
17 ll dp[1005];
18
19 int main(){
20
21     ll n,m,h;
22     int _;
23     for(cin>>_;_;_--){
24         cin>>n>>m>>h;
25         for(int i=1;i<=n;i++){
26             cin>>a[i].pos>>a[i].val>>a[i].delta;
27         }
28         a[n+1].pos=m,a[n+1].val=0,a[n+1].delta=0;
29         for(int i=1;i<=n+1;i++){
30             dp[i]=h;
31         }
32         for(int i=1;i<=n;i++){
33             ll tmp=dp[i]+a[i].val;
34             if(tmp>0){
35                 for(int j=i+1;j<=n+1;j++){
36                     tmp=dp[i]+a[i].val+(a[j].pos-a[i].pos)*a[i].delta;
37                     dp[j]=max(dp[j],tmp);
38                 }
39             }
40         }
41         cout<<dp[n+1]<<endl;
42     }
43
44 }

原文地址:https://www.cnblogs.com/Fighting-sh/p/10092019.html

时间: 2024-08-11 02:37:09

The Last Stand的相关文章

stand up meeting 12-2

今天因为各位组员组里项目原因没有集中在一起进行stand up meeting.但是士杰和天赋国庆分别对项目进度和前后端的结合进行的沟通. 针对后端部分,天赋完成了GetRankingData API的获取和本地缓存的存储,并且通过了单元测试.之后士杰完成了GetScore和Time的函数原型.因为前端的答题界面还需两天左右时间完成,所以我们模拟了GetRankingData的Input对后端逻辑进行测试.接下来天赋和士杰会帮助国庆完成前后端的连接,这样答题界面完成后,我们就将项目推进到答题结果

Linux中的两种守护进程stand alone和xinetd

--http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一般使用stand alone /etc/init.d/ 非常少用xinetd /etc/xinetd.d/ Linux守护进程的运行方式 1.独立运行(stand-alone)的守护进程 独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/rc.d/init.d/目录下.系统服务都是独立运行的守护进程,包括syslogd和cron等

Agile实践日志(2)-- Daily Stand up 和 Retrospective Session

Agile实践日志 (2) -- Daily Stand up 和 Retrospective Session 在Scrum开发过程中,会有三种会议: Grooming (详见Agile实践日志(1)) , Daily Stand up 和Retrospective Meeting Daily Stand up Sprint期间,每天早上小组成员需要在固定的时间地点进行,时间大约15分钟.主要介绍一下昨天做了什么,今天需要做什么,信心完成指数(1-10) Done 昨天完成的 ToDo 今天要做

uva 11174 - Stand in a Line(逆元+递推)

题目连接:uva 11174 - Stand in a Line 题目大意:村子里有n个村名民,现在他们要排成一列,处于对长辈的尊敬,他们不能排在自己父亲的前面,有些人的父亲不一定在村子了.问有多少种列的顺序. 解题思路:[算法竞赛入门经典-训练指南]的例题,主要还用到了欧几里得拓展定理求逆元. #include <cstdio> #include <cstring> #include <vector> using namespace std; typedef long

Stand Up!

? Stand Up! Udi Dahan AS ARCHiTECTS, MAny oF uS HAvE gRoWn from highly technical positions where our success was derived mainly from our ability to talk to machines. However, in the role of architect much of our communication is now done with our fel

[转]ORA-38500: USING CURRENT LOGFILE option not available without stand

标签: oracle 10g 数据库 ora-38500 it 分类: IT author:skate time :2009/08/03 在dataguard启用实时恢复的时候,报如下错误: ORA-38500: USING CURRENT LOGFILE option not available without stand 实际操作: SQL> alter database recover managed standby database using current logfile disco

【递推】【推导】【乘法逆元】UVA - 11174 - Stand in a Line

http://blog.csdn.net/u011915301/article/details/43883039 依旧是<训练指南>上的一道例题.书上讲的比较抽象,下面就把解法具体一下.因为涉及到父子关系,因此自然而然可以将n个节点构造成一棵树,最后将形成一个森林.接下来将使用递归的手法.设f(i)是以节点i为树根的子树,节点i有儿子c1,c2,c3....cj共j棵子树.s[i]为树根为i的子树包含的节点数.如果分别先给各个子树内部排序,那么毫无疑问, 共有f(c1)*f(c2)*f(c3)

stand up meeting 12/11/2015

part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 完成单词释义热度排序:允许用户自主添加释义:完成了button位置的修正(finally)和弹窗的美化:     6 try the backup plan    6 PDF Reader 朱玉影       logic1: 周以舟  --------------   --  -----------  -- logic2: 林建平         pdf 阅读器 张葳          注:周以舟同学未返回 UI——2

stand up meeting 11/16/2015

第一周,熟悉任务中~ 大致写下一天的工作: 冯晓云:熟悉bing接口,本意是调在线的必应词典API,参阅了大量C#调用API开发.net的工作,[约莫是因为有个窗口互动性更强,所以这样的工作更有趣,也更容易找到]然而我的任务只是要生成一个DLL供其他部分调用,所以然并卵~bug粗线在读取URL时,System.Net.WebRequest下找不到GetResponse(),或者是直接找不到WebClient,一度以为自己机子有问题,失控~由于是第一次接触C#,各种百度也没能解决,后来发现同样的代