题目传送门
这道题是一个很明显的dp问题
那么这道题关于读题有一个主要注意的地方:
1.如果用手枪或者AWP击杀Boss之前,这一层的小怪必须已经全部杀光
2.如果没有把Boss一招入魂(一下杀死),那么我们必须直接跳转到其他楼层。
这道题比较复杂的一点就是状态转移很复杂。
当然了,这个楼层的状态只有boss死亡和残血两种状态
那么我们用dp[i][1]dp[i][1]dp[i][1]代表第iii层的boss残血,用dp[i][0]dp[i][0]dp[i][0]代表第iii层的boss死掉了,只有这两种状态。

那么对于dp[i][1]dp[i][1]dp[i][1]这个状态是通过什么状态转移过来的?

(1)通过dp[i−1][0]转移而来的(1)通过dp[i-1][0]转移而来的(1)通过dp[i−1][0]转移而来的

1.本层使用激光枪让boss残血
2.本层使用手枪杀死全部小怪然后再让boss残血

(2)通过dp[i−1][1]转移而来的(2)通过dp[i-1][1]转移而来的(2)通过dp[i−1][1]转移而来的

既然是要穿越的这种情况需要加上2∗d2*d2∗d因为要穿越到i−1i-1i−1层然后再回来,消耗掉了两次穿墙的时间
1.上一层使用手枪击杀,然后本层使用激光枪
1.上一层使用手枪击杀然后本层使用手枪杀死全部小怪,然后让boss残血。

现在再来分析dp[i][0]dp[i][0]dp[i][0]是由什么状态转移而来的?

(1)通过dp[i−1][0]转移而来的(1)通过dp[i-1][0]转移而来的(1)通过dp[i−1][0]转移而来的

本层需要即刻击杀boss因此不能使用激光枪

1.使用手枪杀死全部小怪以后,再使用AWP一击入魂。

(2)通过dp[i−1][1]转移而来的(2)通过dp[i-1][1]转移而来的(2)通过dp[i−1][1]转移而来的

1.用手枪击杀上一层的boss以后,返回本层使用手枪击杀全部小怪,再是以哦那个AWP一枪入魂。
2.还有就是在本层正好让boss残血,穿越到i−1i-1i−1层杀完上一层的boss以后,再杀掉本层的boss(这个不好想)

请看代码

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[2120200];
ll dp[2100000][2];
ll minn(ll x,ll y,ll z){return min(x,min(y,z));
}
int main(){ll n,r1,r2,r3,d;cin>>n>>r1>>r2>>r3>>d;for(ll i=1;i<=n;i++)cin>>a[i];dp[1][0]=a[1]*r1+r3+d;dp[1][1]=min(a[1]*r1+r1,r2)+d;
//  cout<<dp[1][0]<<' '<<dp[1][1]<<endl;for(ll i=2;i<=n;i++){dp[i][1]=minn(dp[i-1][0]+a[i]*r1+r1,dp[i-1][0]+r2,dp[i-1][1]+2*d+r1+min(r2,(a[i]+1)*r1))+d;dp[i][0]=minn(dp[i-1][0]+a[i]*r1+r3,dp[i-1][1]+r1+a[i]*r1+r3+2*d,dp[i-1][1]+r1+2*d+min(r2+r1,a[i]*r1+r1+r1))+d;//   cout<<dp[i][1]<<' '<<dp[i][0]<<endl;dp[n][1]+d+r1,}printf("%lld\n",min(dp[n][0],dp[n-1][1]+2*d+r1+a[n]*r1+min(r3,2*d+2*r1))-d);return 0;
}

CF1397E Monster Invaders(思维+dp)相关推荐

  1. Codeforces Round #666(Div. 2)E. Monster Invaders(DP)

    E. Monster Invaders 题意: 游戏里有nnn个关卡,你初始在第一关,第iii关有tit_iti​个小怪,每关都有且仅有一个boss. 小怪的hp为1,boss的hp为2. 你有三种攻 ...

  2. Codeforces1397 E. Monster Invaders(dp)

    题意: 数据范围:2<=n<=2e6,1<=r1<=r2<=r3<=1e9,1<=d<=1e9,1<=a(i)<=1e6 解法: 每层有三种 ...

  3. P4766 [CERC2014]Outer space invaders——思维+区间dp

    题目传送门 思路 这道题思维的转换真的很妙,第 i 个外星人出现的时间区间是 [ai,bi][a_i,b_i][ai​,bi​] ,距离为 did_idi​ , 我们可以以时间区间为横坐标,距离区间为 ...

  4. CodeForces 1397E :Monster Invaders DP

    传送门 题目描述 有两种不同类型的怪物和三种不同类型的枪, 一个拥有1点生命的普通怪物. 一个拥有2点生命的boss. 这三种枪是: 手枪,对一个怪物造成1点生命伤害,时间r1 激光枪,对当前等级的所 ...

  5. CodeForces - 1353E K-periodic Garland(思维+dp)

    题目链接:点击查看 题目大意:给出 n 个灯泡以及其初始状态(开或关),每次操作可以将任意一个灯泡的状态置反,问最少需要操作多少次,可以使得所有开着的灯泡之间相距 k 个单位 题目分析:因为需要满足所 ...

  6. 思维dp ---- Codeforces Round #142 (Div. 1) D. Towers

    题目链接 题目大意: 你可以把第iii座塔和i+1i+1i+1座或i−1i-1i−1座合并成一个 使得到的那座塔的高度是原来两座塔的和 问最使序列变成严格不增最小合并次数 解题思路: 首先我想到的是贪 ...

  7. 思维dp ---- CF41D Pawn [可达状态统计dp]

    题目链接 题目大意: 解题思路: 如果没有 k+1∣∑wk+1|\sum wk+1∣∑w 的限制的话就是个简单的 dp dp[i][j]=max(dp[i+1][j−1],dp[i+1][j+1])d ...

  8. 思维dp ---- 复杂状态找中间状态作为dp状态 1552F - Telepanting

    题目链接 题目大意: 有个蚂蚁从000号点要到xn+1x_n+1xn​+1的位置. 在x0,x1,x2,x3,.....,xn+1,xnx_0,x_1,x_2,x_3,.....,x_{n+1},x_ ...

  9. 思维dp ---- K步最短路 D. Explorer Space

    题目链接 解题思路: 这题目本质就是求K/2步最短路然后乘以2就可以了因为要回去嘛 如何求k/2步最短路呢? 就是我们dp[k][i][j]dp[k][i][j]dp[k][i][j]求的是kkk步到 ...

最新文章

  1. python使用pyodbc连接sql server 2008
  2. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
  3. CF1548B Integers Have Friends
  4. 超全十大经典排序算法及其分析
  5. 全球互联网领域第一人!马云获福布斯终身成就奖
  6. mysql 自动生成mapper_Spring Boot整合mybatis并自动生成mapper和实体实例解析
  7. 2011年7月20日 14:32:41
  8. 对象(sqlca、sqlsa、sqlda)
  9. Ubuntu 远程使用ssh 开启服务器终端的方法
  10. java fake,FakeScript-Java 轻量级嵌入式脚本语言
  11. 大陆计算机科学家排名,韩家炜、张宏江2位校友在世界顶尖计算机科学家排名中分别位居华人科学家和中国大陆科学家之首...
  12. 碧蓝航线频道和服务器所在的文件夹,碧蓝航线如何反和谐 反和谐方法
  13. 淘宝首页性能优化的“黄金法则”
  14. 亿能bms上位机_上位机软件 上位机PC软件 bms电池管理系统测试系统软件
  15. Cocos2d-x教程(33)-三维物体AABB碰撞检测算法
  16. 三种查询IP归属地的接口
  17. 职场001 什么时候跳槽
  18. 地表最强超融合 | 揭开VxRail“隐秘的角落”
  19. 量子计算(二):为什么需要量子计算
  20. JDK8新特性知识点总结

热门文章

  1. 微信媒体服务器推流,干货:“微信+直播”成新媒体营销新方式
  2. 猜猜画画 Pictionary 游戏规则
  3. 云服务器3M带宽能容纳多少访问?
  4. Synopsys Sentaurus TCAD系列教程之-- Svisual《一》看图工具
  5. 蓄电池单格电压多少伏_蓄电池的输出电压一般是多少
  6. 超导材料应用于量子计算机,Nature子刊:超导超材料有望助力量子计算机的实现...
  7. 协同分割co-segmentation
  8. 76、基于STM32的电动车小车蓄电池/锂电池充电桩系统设计
  9. 2.latch之oracle latch
  10. 【论文分享】UMVD-FSL:Unseen Malware Variants Detection Using Few-Shot Learning