正题

题目链接:https://www.luogu.com.cn/problem/P4922


题目大意

题目好长直接放了

在崩坏 3 中有一个叫做天命基地的地方,女武神们将在基地中开派对与敌人们厮杀。

女武神们的攻击力为 \(atk\),她们将进行资源保卫战!

天命基地中有 \(1\)个 boss,boss 的血量为 \(hp\),boss 不会攻击女武神。

现在有一条长度为 \(n\) 的道路,道路的一头是 boss,另外一头是女武神需要保卫的资源,最开始 boss 每秒将会向资源移动 1 个单位长度。女武神们需要保护资源,所以她们要攻击 boss。

我们将整条道路分成 \(n\) 个格子,最开始资源在第 \(n\) 格,女武神在第 \(1\) 格,boss 在第 \(0\) 格。

因为女武神的手太短了,所以只有当 boss 到达女武神当前那一格的时候,女武神才会攻击 boss,攻击完之后女武神会后退一格。

女武神有以下 \(8\) 种攻击方式(每一格只能使用一种攻击方式)

  • 技能,造成 \(80\% atk\) 的伤害,并使 boss 获得 \(1\) 层燃烧 buff,在之后的每秒钟额外受到 \(10\% atk\) 的伤害。(燃烧buff可以叠加)
  • 闪避,造成 \(70\% atk\) 的伤害,并使 boss 时间暂停 \(5s\)。(\(5s\) 内 boss 无法移动且仍会受到燃烧伤害)
  • 大招,造成 \(120\% atk\) 的伤害,使 boss 时间暂停 \(5s\)。
  • 分支攻击,造成 \(70\% atk\) 的伤害,并使 boss 时空减速,使 boss 经过每一个格子的时间增加 \(1s\)。
  • 爱酱的炸弹,使 boss 获得 \(1\) 层燃烧 buff,并使 boss 愤怒,移速 \(+50\%\)。
  • 犹大的誓约,造成 \(60\% atk\) 的伤害,如果 boss 有燃烧 buff 则减少 1 层,使 boss 时间暂停 \(4s\)。
  • 奥托之光,造成 \(10\% atk\) 的伤害,如果 boss 有燃烧 buff 则清除 buff,使 boss 时间暂停 \(10s\)。
  • 律者之力,造成 \(80\% atk\) 的伤害,使 boss 的移动速度 \(+100\%\)。

现在给你所有的信息,让你帮助 disangan233 蒟蒻算一下,他的女武神能否在 boss 触碰到资源前战胜 boss。

如果可以,输出 boss 死亡时距离资源最远的格子编号。如果不可以,请输出对 boss 造成的最大伤害。

对于 \(100\%\) 的数据,保证:

\[n\leq 10,000 \qquad atk\equiv 0(\bmod\ 10)\qquad atk\leq 10,000\qquad \max Atk\leq 2^{64}-1
\]

解题思路

快三年之前的比赛上面写的题了,那时候只会写\(O(n^3)\)的\(dp\)。(什么一雪前耻)

首先有很多技能一看就是没有用的,有用的只有技能(叠燃烧),分支攻击(叠减速),大招。

然后大招一定是最后放的,还有一个就是\(n\)的范围好像是可以\(O(n^2)\)卡一下的。

设\(f_{i,j}\)表示到前\(i\)次,\(j\)层燃烧,然后剩下\(i-j\)层就是减速了。

这样\(dp\)就好了,时间复杂度\(O(n^2)\)因为\(j\leq i\)所以常数是\(\frac{1}{2}\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll unsigned long long
using namespace std;
const ll N=11000;
ll n,hp,atk,maxs,mins,f[2][N];
signed main()
{
scanf("%lld%lld%lld",&n,&hp,&atk);atk/=10ull;
if(!atk)return printf("0\nMiHoYo Was Destroyed!");
mins=n;
for(ll i=0;i<n;i++){
for(ll j=0;j<=i;j++){
ll k=i-j+1;//燃烧j层 减速k层
maxs=max(maxs,f[i&1][j]+atk*j*(n-i)*(5ull+k)+(n-i)*atk*12ull);
mins=min(mins,i+(hp-f[i&1][j]+(j*5ull+j*k+12ull)*atk-1)/(j*5ull+j*k+12ull)/atk);
f[~i&1][j+1]=max(f[~i&1][j+1],k*j*atk+atk*8ull+f[i&1][j]);//叠燃烧
f[~i&1][j]=max(f[~i&1][j],k*j*atk+atk*7ull+f[i&1][j]);//叠减速
}
}
if(maxs>=hp)printf("%lld\nTech Otakus Save The World!",mins);
else printf("%lld\nMiHoYo Was Destroyed!",maxs);
return 0;
}

P4922-[MtOI2018]崩坏3?非酋之战!【dp】的更多相关文章

  1. Codeforces Round #323 (Div. 2) Once Again... CodeForces - 582B 最长非下降子序列【dp】(不明白)

    B. Once Again... time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. 连续子数组的和的绝对值的最大值、最小值(非绝对值的话直接dp动态规划)

    前缀和的思路: sum[i] = num[0]+num[1]+......+num[i-1] sum[j] = num[0]+num[1]+......+num[j-1] 那么:num[i]+num[ ...

  3. 狼人杀BETA阶段计划简介

    狼人杀beta阶段任务与目标 简介 一.前言 狼人杀alpha阶段终于在组团刷夜中结束了,我们取得了一些成绩,同时也暴露了团队的一些问题.但不管怎样,有了在alpha版本中收获的经验,我们将在beta ...

  4. 原生JS实现音乐播放器!

      前  言            最近在复习JS,觉得音乐播放器是个挺有意思的东西,今天就来用我们最原生的JS写一个小小的音乐播放器~ 主要功能: 1.支持循环.随机播放 2.在播放的同时支持图片的 ...

  5. [学习笔记] 模拟退火 (Simulated Annealing)

    真没想到这东西真的在考场上用到了...顺便水篇blog以示诈尸好了(逃 模拟退火算法 模拟退火是一种随机化算法, 用于求函数的极值qwq 比如给出一个问题, 我们要求最优解的值, 但是可能的方案数量极 ...

  6. kali系统固化到固态硬盘小记(赠送给广大折腾党的笔记)

    1.首先你需要一个移动硬盘和一个移动硬盘盒子(一根数据转换线,一般买盒子商家会赠送的) SSD硬盘要事先格式化一下格式,不然识别不出来 2.准备好Kali镜像,传送门在这里https://www.ka ...

  7. Python爬虫——你们要的王者荣耀高清图

    曾经144区的王者 学了计算机后 头发逐渐从李白变成了达摩 秀发有何用,变秃亦变强 (emmm徒弟说李白比达摩强,变秃不一定变强) 前言 前几天开了农药的安装包,发现农药是.Net实现的游戏 虽然游戏 ...

  8. 【转】 DOTA2中的伪随机及其lua实现

    因为单纯的随机确实会影响到竞技性,所以dota2引入的是伪随机机制,在大量的技能中,比如说混沌的混乱之箭.剑圣的剑舞.冰女的冰霜领域之类的技能,都利用了伪随机机制. 而纯随机,或者标准正态分布并不会因 ...

  9. BZOJ1093或洛谷2272 [ZJOI2007]最大半连通子图

    BZOJ原题链接 洛谷原题链接 和 Going from u to v or from v to u?(题解)这道题类似,只不过是求最大子图的大小和个数而已. 一样用\(tarjan\)求强连通分量, ...

随机推荐

  1. 带你读AI论文丨LaneNet基于实体分割的端到端车道线检测

    摘要:LaneNet是一种端到端的车道线检测方法,包含 LanNet + H-Net 两个网络模型. 本文分享自华为云社区<[论文解读]LaneNet基于实体分割的端到端车道线检测>,作者 ...

  2. c# – RichTextBox用表情符号/图像替换字符串

    在RichtTextBox中,我想用表情符号图像自动替换表情符号字符串(例如:D).我到目前为止工作,除了当我在现有的单词/字符串之间写出表情符号字符串时,图像会在行尾插入. 例如:你好(在这里插入: ...

  3. java 捕获组与非捕获组

    非捕获组:格式:(?:xxxx), 如:(?:aaa)\\w+(bbb)\\1,\\1 代表重复捕获的第一组即是(bbb) public static void main(String[] args) ...

  4. Servlet常见问题

    时间:2016-12-6 23:18 java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMapcommo ...

  5. 面试必问题:JS防抖与节流

    摘要:防抖与节流可谓是面试常见,其实很好理解,下面带你分分钟了解防抖与节流的基本思想与写法~ 本文分享自华为云社区<JS防抖与节流快速了解与应用>,作者:北极光之夜. . 一.速识防抖: ...

  6. nginx《一安装》

    linux上nginx相关 wget https://nginx.org/download/nginx-1.14.1.tar.gz tar -zxvf nginx-1.14.1.tar.gz ./co ...

  7. SpringBoot应用中使用AOP记录接口访问日志

    SpringBoot应用中使用AOP记录接口访问日志 本文主要讲述AOP在mall项目中的应用,通过在controller层建一个切面来实现接口访问的统一日志记录. AOP AOP为Aspect Or ...

  8. Ubuntu中添加desktop entry

    创建desktop文件 gedit my_app.desktop 添加文件内容,在启动时,选择加载的bashrc文件,用于初始化,这样可以用不同的desktop entry启动不同的环境,提高打开环境 ...

  9. MySQL 常用的聚合函数

    [常用的聚合函数] mysql聚合函数一般用户统计一列值进行计算,然后返回计算结果.一般于分组group by 配合使用. count //统计个数 select count(*) from test ...

  10. noip模拟21

    开题发现这场考过,定睛一看,发现是省选前最后一场,没改过呀--但是还是讲武德的赛时没提交 A. Median 神奇之处在于 \(1e7\) 个质数居然能线性筛出来~ 那么 \(S2\) 可以直接筛出来 ...