题意:

数据范围:2<=n<=2e6,1<=r1<=r2<=r3<=1e9,1<=d<=1e9,1<=a(i)<=1e6

解法:

每层有三种选择:
1.用手枪a(i)次,然后AWP秒boss.
2.用手枪a(i)+1次,然后被迫转移到相邻层.
3.用激光枪1次,然后被迫转移到相邻层.对于某一关,如果上一关的怪物没清空,那么肯定要回去清空,
因为不管怎么样都是要清空的,晚清空不会更优(转移需要d的时间).f[i][0]表示前i层,第i层boss剩下0血量,停留在i的最少时间.
f[i][1]表示前i层,第i层boss剩下1血量,当前必须要转移的最少时间.
然后枚举所有操作方式进行dp即可.参考:
https://www.luogu.com.cn/blog/feecle6418/solution-cf1396c
https://blog.csdn.net/m0_46427179/article/details/108325750

code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PI pair<int,int>
const int maxm=1e6+5;
int f[maxm][2];
int a[maxm];
int n,r1,r2,r3,d;
signed main(){cin>>n>>r1>>r2>>r3>>d;for(int i=1;i<=n;i++)cin>>a[i];f[1][0]=r1*a[1]+r3;f[1][1]=min(r2,r1*a[1]+r1);for(int i=1;i<n;i++){f[i+1][0]=f[i+1][1]=1e18;//f[i+1][1]=min(f[i+1][1],f[i][0]+d+min(r2,r1*a[i+1]+r1));f[i+1][1]=min(f[i+1][1],f[i][1]+d+min(r2,r1*a[i+1]+r1)+d+r1+d);//这里不是最优,但是可以用来更新f[i+1][0]=min(f[i+1][0],f[i][0]+d+r1*a[i+1]+r3);f[i+1][0]=min(f[i+1][0],f[i][1]+d+r1*a[i+1]+r3+d+r1+d);f[i+1][0]=min(f[i+1][0],f[i][1]+d+min(r2,r1*a[i+1]+r1)+d+r1+d+r1);}int ans=min(f[n][0],f[n-1][1]+d+r1*a[n]+r3+d+r1);cout<<ans<<endl;return 0;
}

Codeforces1397 E. 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. cf-666 div2: E Monster Invaders (动态规划)

    题意 思路 动态规划,状态方程见代码 代码 class E {public:void update(ll &a, ll b) {a = a < b ? a : b;}void solve ...

  3. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  4. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  5. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  6. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  7. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  8. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  9. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

最新文章

  1. VBS基础篇 - 运算符(1) - 运算符优先级
  2. JAVA 将图片转换为Base64编码
  3. oracle产品追溯,如何追溯AR到Receipt再到GL
  4. Python3异常处理
  5. 【JSP】JSP与oracle数据库交互案例
  6. Linux与Windows中动态链接库的分析与对比
  7. 斯坦福李纪为博士毕业论文:让机器像人一样交流
  8. Python学习之路_day_08(函数介绍)
  9. 与旧代码接口的注意事项
  10. Atitit 诗歌之道 attilax著 艾龙 著 1. 诗歌集分类 1 1.1. 国王颂歌 1 1.2. 爱情类(相逢 赞美 相识 思念 离去 分分离离 忘记) 1 1.3. 其他 1 2. 世界
  11. ASP.NET 访问项目网站以外的目录文件
  12. Unity3D中的Update、LateUpdate和FixedUpdate的意义
  13. Sklearn中的二分类模型可以进行多分类的原理
  14. 雪上加霜!吴秀波在《雪豹》中被除名
  15. gcc O3和O0编译的输出浮点数不相同
  16. IBM沃森Watson答题过程全揭秘
  17. linux-C 重定向句柄操作(dup,duo2,dup3)详解及demo
  18. CAD偏移曲线(网页版)
  19. python参考文献及其出版社_参考文献查重-Python
  20. 工业相机的机械快门与电子快门有什么区别?

热门文章

  1. 生物化学《第二章糖类》
  2. 移动时代营销如何做?滴滴们给康师傅们上了一颗
  3. 计算机与英语教学相结合,计算机与英语教学结合_英语论文.doc
  4. 小数乘以100后精度丢失
  5. pc适配屏幕_如何拍摄PC游戏的屏幕截图
  6. Anubis的xtr文件简要说明
  7. java连接SqLite的简单测试
  8. error TS7056
  9. MCS-51 单片机的结构和工作原理
  10. 国仁网络资讯:短视频拍摄如何上热门;掌握这8大拍摄运镜手法即可。