标签:pre 数据 初始 get 跳过 queue ios none arc
https://ac.nowcoder.com/acm/contest/303/L
当刀锋女王的生命值小于等于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]互不相同。
对于每组数据,请输出一行一个正整数表示刀锋女王在选择最优策略的情况下到达人族基地时自身生命的最大值。
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 }
标签:pre 数据 初始 get 跳过 queue ios none arc
原文地址:https://www.cnblogs.com/Fighting-sh/p/10092019.html