Codeforces1397 E. Monster Invaders(dp)
题意:
数据范围: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)相关推荐
- Codeforces Round #666(Div. 2)E. Monster Invaders(DP)
E. Monster Invaders 题意: 游戏里有nnn个关卡,你初始在第一关,第iii关有tit_iti个小怪,每关都有且仅有一个boss. 小怪的hp为1,boss的hp为2. 你有三种攻 ...
- cf-666 div2: E Monster Invaders (动态规划)
题意 思路 动态规划,状态方程见代码 代码 class E {public:void update(ll &a, ll b) {a = a < b ? a : b;}void solve ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
- LeetCode 编辑距离 II(DP)
1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...
- LeetCode 1220. 统计元音字母序列的数目(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...
- LeetCode 265. 粉刷房子 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...
- LeetCode 256. 粉刷房子(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...
- LeetCode 1223. 掷骰子模拟(DP)
1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...
- LeetCode 1155. 掷骰子的N种方法(DP)
1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...
最新文章
- VBS基础篇 - 运算符(1) - 运算符优先级
- JAVA 将图片转换为Base64编码
- oracle产品追溯,如何追溯AR到Receipt再到GL
- Python3异常处理
- 【JSP】JSP与oracle数据库交互案例
- Linux与Windows中动态链接库的分析与对比
- 斯坦福李纪为博士毕业论文:让机器像人一样交流
- Python学习之路_day_08(函数介绍)
- 与旧代码接口的注意事项
- Atitit 诗歌之道 attilax著 艾龙 著 1. 诗歌集分类	1 1.1. 国王颂歌	1 1.2. 爱情类(相逢 赞美 相识 思念 离去 分分离离 忘记)	1 1.3. 其他	1 2. 世界
- ASP.NET 访问项目网站以外的目录文件
- Unity3D中的Update、LateUpdate和FixedUpdate的意义
- Sklearn中的二分类模型可以进行多分类的原理
- 雪上加霜!吴秀波在《雪豹》中被除名
- gcc O3和O0编译的输出浮点数不相同
- IBM沃森Watson答题过程全揭秘
- linux-C 重定向句柄操作(dup,duo2,dup3)详解及demo
- CAD偏移曲线(网页版)
- python参考文献及其出版社_参考文献查重-Python
- 工业相机的机械快门与电子快门有什么区别?