Codeforces Round #666(Div. 2)E. Monster Invaders(DP)
E. Monster Invaders
题意:
游戏里有nnn个关卡,你初始在第一关,第iii关有tit_iti个小怪,每关都有且仅有一个boss。
小怪的hp为1,boss的hp为2。
你有三种攻击方式:
手枪:花费aaa时间对敌单体造成1伤害。
激光枪:花费bbb时间对敌全体造成1伤害。
AWP:花费ccc时间对敌单体造成2伤害。
(1≤a≤b≤c≤1e9)(1\le a\le b\le c\le1e9)(1≤a≤b≤c≤1e9)
当你一次打不死boss时(即没有用AWP),为了降低仇恨,你必须传送到其他关卡。
传送是在关卡移动的唯一方式,每次传送需要ddd时间,且只能传送到相邻关卡,特别的,从111只能到222,从nnn只能到n−1n-1n−1。
求杀死所有怪物的最小时间。
解析:
首先对于每一关只有三种战术:
- 手枪干掉所有小怪,分两次打死boss
- 激光枪干掉所有小怪然后离开,之后回来用手枪打死boss
- 手枪干掉所有小怪,AWP秒了boss
归纳后,发现从某点离开时只有两种状态:boss剩1hp和0hp,其转移代价分别为
min(a∗ti+a,b)min(a*t_i+a,b)min(a∗ti+a,b)和a∗ti+ca*t_i+ca∗ti+c,分别记为xix_ixi和yiy_iyi。
令fi,jf_{i,j}fi,j表示在第iii关攻击后,boss剩下jjj点hp的最小时间花费,则有:
//表示(i-1)->(i),(i-1)->(i)->(i-1)->(i)两种情况,其中当i=n时注意结束在n-1位置的情况
f[i][0]=min(f[i-1][0]+y[i],f[i-1][1]+2*d+a+min(x[i]+a,y[i]+(i==n?-d:0)))+d;
//表示(i-1)->(i),(i-1)->(i-2)->(i-1)->(i)两种情况
f[i][1]=min(f[i-1][0],f[i-1][1]+a+2*d)+x[i]+d;
代码:
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define GKD ios::sync_with_stdio(false)
using namespace std;
const int N=1000010;
int n;
ll a,b,c,d,t[N],f[N][2],x[N],y[N],ans;
int main()
{GKD;cin>>n>>a>>b>>c>>d;mem(f,0x3f);ans=d*n-d;for(int i=1;i<=n;i++){cin>>t[i];x[i]=min(a*t[i]+a,b),y[i]=a*t[i]+c;i==1&&(f[i][0]=y[i],f[i][1]=x[i]);}for(int i=2;i<=n;i++){f[i][0]=min(f[i-1][0]+y[i],f[i-1][1]+2*d+a+min(x[i]+a,y[i]+(i==n?-d:0)))+d;f[i][1]=min(f[i-1][0],f[i-1][1]+a+2*d)+x[i]+d;}ans=f[n][0];cout<<ans;
}
Codeforces Round #666(Div. 2)E. Monster Invaders(DP)相关推荐
- Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)切题报告(A-B题)
这是我第二次参加CF比赛,也是第一次写博客,写得不好,望各位大佬海涵. A. Single Wildcard Pattern Matching 原题链接 这道题,这是难到让人无法直视,太水了. 题目大 ...
- [区间记忆化dp入门][Bribe the Prisoners SPOJ - GCJ1C09C][Codeforces Round #505D (rated, Div. 1 + Div. 2, ba]
Bribe the Prisoners SPOJ - GCJ1C09C 作为这类题代表,f[i][j]代表第i点到第j点单独处理的最值 这题关键:释放某个囚犯后,就把囚犯分成两段,两段互相独立 这类d ...
- Codeforces Round #666 (Div. 1) ABCD(E)题解
目录 比赛记录: A B C D Solution 1 Solution 2 Solution 3 Solution 4 E(目前不太会,正在尝试) 比赛记录: 00:00:00 Participan ...
- 【牛客 - 370B】Rinne Loves Graph(分层图最短路 或 最短路dp)
题干: Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去. 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些城镇之间用双向道路 ...
- 程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)
文章目录 1. 题目 2. 解题 2.1 前缀和(超时) 2.2 动态规划 1. 题目 给定一个正整数和负整数组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵. 返回一个数组 [r1, c1 ...
- Codeforces Round #666 (Div. 2)D. Stoned Game(博弈问题)
problem T和HL玩游戏,n堆石头,玩家轮流在石堆中选择一个(但不能是上一个人取的那堆)取一个石子 一旦有一方不能取石头则判输 solution 统计所有石头数,如果总数小于mx(最多石头的一堆 ...
- Codeforces Round #666 (Div. 2)C - Multiples of Length(错位相减)
problem 给出N个数,可以进行三次操作, 每次选中一个区间,区间里任意一个元素可以加上一个区间长度的倍数(并且加的数可以互相不同) 让所有数变成0 求方案 solution 好久没打CF了,签到 ...
- Codeforces Round #666 (Div. 2)B. Power Sequence(等比数列)
problem 给出一个数列 两个操作 交换位置或者+1 -1 使数列成为首项为1的等比 求最少操作次数 solution 考虑到等比数列一定递增,直接排序 (过渡)试想特殊情况,排序后如果知道公比, ...
- B. Power Sequence(数学+枚举)Codeforces Round #666 (Div. 2)
原题链接: https://codeforces.com/contest/1397/problem/B 测试样例: input 3 1 3 2 output 1 input 3 1000000000 ...
最新文章
- websockets_如何将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序
- Robot Framework + Selenium library + IEDriver环境搭建
- Bootstrap学习(二)
- 腾讯网易禁止未成年人本周六玩游戏
- 毕业后拉开距离的真正原因!
- iframe 滚动条不显示_BUG赏金 | 当我发现iFrame注入时的利用
- BZOJ4003: [JLOI2015]城池攻占
- java入门第二季--封装--java中的this
- 远程医疗作用_是远程医疗保健的未来
- C语言经典算法实例5:验证哥德巴赫猜想
- 全面解析Sbo业务审批流程与结构
- 路线规划算法设计要点
- aardio - 【开源软件】aardio文件加解密
- 【渝粤教育】电大中专中医基础知识 作业 题库
- 解决EZP_XPro无法烧录
- Python自动化操作Excel绘制条形图!
- Python3中正则表达式使用方法
- linux防火墙关闭与启动命令
- qt控制程序打开记事本_基于QT记事本应用程序开发.doc
- 商城后台管理React+Springboot
热门文章
- 伯克利的电气工程和计算机科学专业,Berkeley的Electrical Engineering Computer Sciences「加州大学伯克利分校电气工程与计算机科学系」...
- Vue标准后台界面及登录功能流程(2)
- iOS开发系列--IOS程序开发概览ios基础
- Unable to negotiate with 120.26.106.212 port 22: no matching host key type f
- 用c语言写复化梯形积分公式,第六章 函数和宏定义实验(2)
- 基于SAS对美国新冠数据的分析
- win10英语语言包
- 元宇宙中的手势交互(四)第一款主流VR头显中的手势交互原理剖析(Meta Quest 2)
- 翻译:确认中的处理控制(CO1P)
- Python实现 文本进度条展示(嵩天老师)