正题

题目链接: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. javascript html 鼠标放大镜效果

    1.鼠标放大镜效果 鼠标放大镜效果,将鼠标移入到左图片,则可以在其右边看到放大的图片,且鼠标移动滑块的大小即为右图显示图片.实际效果如下图所示:   <!DOCTYPE html> < ...

  2. Python爬虫(二)——发送请求

    1. requests库介绍 ​ 在python中有许多支持发送的库.比如:urlib.requests.selenium.aiohttp--等.但我们当前最常用的还是requests库,这个库是基于 ...

  3. Oracle数据库 —— DDL

    时间:2016-10-5 14:55 逆风的方向更适合飞翔我不怕千万人阻挡只怕自己投降 --------------------------------------- 一.表的创建与管理1.表的基本操 ...

  4. docker学习之network:初识网络配置

    起因 我的开发环境需要一个python代码运行环境.reids服务和mysql服务. 由于以前,我的开发环境是mac,而CI和线上运行环境是centos,偶尔会出项本地单元测试跑不过,而CI可以过.这 ...

  5. github push报LibreSSL SSL_connect错误

    最近发现在家里push代码到github的时候总是报错,报错内容如下: fatal: unable to access 'https://github.com/MangoDowner/clear-le ...

  6. 自研 Pulsar Starter:winfun-pulsar-spring-boot-starter

    原文:自研 Pulsar Starter:winfun-pulsar-spring-boot-starter 里程碑 版本 功能点 作者 完成 1.0.0 支持PulsarTemplate发送消息&a ...

  7. redis>lua脚本

    String lua="local num=redis.call('incr',KEYS[1])\n"+"if tonumber(num)==1 then\n" ...

  8. 接口自动化-python+requests+pytest+csv+yaml

    本套代码和逻辑 是本人的劳动成果,如果有转载需要标注, 非常适合公司做项目的同学!!!小白也可以学哦! 1.项目目录  2.公共方法的封装 2.1如果不用配置文件 可以使用这个方法进行封装--但是有一 ...

  9. Java如何搭建脚手架(自动生成通用代码),创建自定义的archetype(项目模板)

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  10. 掌握基于AOP事务管理

    一.手动管理和半自动工厂模式 二.AOP事务管理 1.表达式中,第一个※是返回值所有类型,service包下一个点意思是service包下的类,两个点意思是service包下的类和其子包下的类也包含, ...