正题

题目链接: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. WPF以鼠标当前位置进行缩放

    <Window x:Class="ImageViewer.MainWindow" xmlns="http://schemas.microsoft.com/winfx ...

  2. uwp 之吐司 toast

    Toast -------------------------------------------------------------- var t = Windows.UI.Notification ...

  3. QT 中的模态和非模态对话框

    void MainWindow::on_pushButton_clicked() { //模态 QDialog dlg(this); dlg.resize(100,100); dlg.exec(); ...

  4. 10.SpringMVC之格式化、校验

    数据格式化 数据格式化的注解: 数据校验JSR303 Hibernate Validator扩展注解 启动 springMVC数据校验 转换.格式化.校验出错处理:

  5. linux下设备驱动的结构&编译&加载

    构造和运行模块 insmod modprobe rmmod 用来装载模块到正运行的内核和移除模块的用户空间工具. #include<linux/init.h> module_init(in ...

  6. Timer和TimerTask(转载)

    下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了r ...

  7. BUU-CTF[CISCN2019 华东南赛区]Web11

    BUU-CTF[CISCN2019 华东南赛区]Web11 页面最下端有提示Build with Smarty ! 确定页面使用的是Smarty模板引擎.输入{$smarty.version}就可以看 ...

  8. PyQT5基础布局管理

    绝对定位布局 使用move(x, y)可以对窗口进行布局,以窗口左上角为原点,向右为 x 轴正方向,向下为 y 轴正方向,移动(x,y); import sys from PyQt5.QtGui im ...

  9. 给dubbo贡献源码,做梦都在修bug

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 一 在之前的文章<redis在微服务领域的贡献>中,从一次面试经历中了解了redi ...

  10. 对easyui-validatebox的验证类型的扩展--补充

    一.说明 这篇文章是<对easyui-validatebox的验证类型的扩展>的补充.在工程的持续开发中,我们又对此进行了更多的补充. 二.补充代码 增加了更多的验证类型. /* * 比较 ...