[hdu7026]Might and Magic
(以下默认$A_{0},D_{0},P_{0},K_{0}$都为非负整数)
显然存活轮数$S=\lceil\frac{H_{0}}{C_{p}\max(A_{1}-D_{0},1)}\rceil$是一个关键的变量,且根据数论分块其仅有$o(\sqrt{H_{0}})$种取值,不妨利用数论分块直接$o(\sqrt{H_{0}})$枚举,进而也可以确定$D_{0}$(取对应的最小值即可)
(上取整的数论分块实际上即将$H_{0}-1$即可)
进一步的,有以下结论:存在一种取到最值的方案,满足$A_{0}=0$或$A_{0}=N'$
关于证明,考虑再枚举这$S$轮中物理攻击和魔法攻击的轮数,即$S_{p}$和$S_{m}$(其中$S_{p}+S_{m}=S$)
接下来,考虑如何分配物理攻击和魔法攻击的点数,令$F_{p}(x)$和$F_{m}(x)$分别为给物理攻击和魔法攻击分配$x$点的最大伤害值,显然有
$$
\begin{cases}F_{p}(x)=C_{p}S_{p}\max(x-D_{1},1)\\F_{m}(x)=C_{m}\begin{cases}\lfloor\frac{x}{2}\rfloor(x-\lfloor\frac{x}{2}\rfloor)&(\lfloor\frac{x}{2}\rfloor\le S_{m})\\S_{m}(x-S_{m})&(\lfloor\frac{x}{2}\rfloor>S_{m})\end{cases}\end{cases}
$$
最终答案即求$F(x)=F_{p}(x)+F_{m}(N'-x)$在$x\in [0,N']$的最大值,不难证明$F_{p}$和$F_{m}$都是下凸的,进而将$F_{m}$翻转后和$F_{p}$求和仍是下凸的,也即$F$是下凸的
同时,下凸函数的最大值显然在端点处取到,即$x=0$或$x=N'$,显然$x$也即$A_{0}$,结论得证
通过这个结论,对两类分别讨论:
1.若$A_{0}=0$,考虑再枚举$K_{0}$,答案即
$$
\begin{cases}C_{p}(S-K_{0})+C_{m}K_{0}(N'-K_{0})&(K_{0}<S)\\C_{m}S(N'-K_{0})&( K_{0}\ge S)\end{cases}
$$
(为了保证魔法攻击不劣于物理攻击,可以令$K_{0}<N'$,但实际上也会在下面的情况中考虑)
即是一个关于$K_{0}$的分段一次和二次函数, 不难求极值
2.若$A_{0}=N'$,显然全部使用物理攻击,答案即$C_{p}S\max(A_{0}-D_{1},1)$
由于有$t$组数据,最终总复杂度为$o(t\sqrt{H_{0}})$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 int t,Cp,Cm,H0,A1,D1,n;
5 ll ans;
6 ll f(ll a,ll b,ll c,int x){
7 return a*x*x+b*x+c;
8 }
9 ll get_max(ll a,ll b,ll c,int l,int r){
10 ll pos=-b/(a<<1),ans=max(f(a,b,c,l),f(a,b,c,r));
11 if ((l<=pos)&&(pos<=r))ans=max(ans,f(a,b,c,pos));
12 if ((l<=pos+1)&&(pos+1<=r))ans=max(ans,f(a,b,c,pos+1));
13 return ans;
14 }
15 int main(){
16 scanf("%d",&t);
17 while (t--){
18 scanf("%d%d%d%d%d%d",&Cp,&Cm,&H0,&A1,&D1,&n);
19 ans=0;
20 for(int i=1,j;i<=A1;i=j+1){
21 if (i>=H0)j=A1;
22 else j=min((H0-1)/((H0-1)/i),A1);
23 int S=((H0+i-1)/i+Cp-1)/Cp,D0=A1-j,nn=n-D0;
24 if (nn<0)continue;
25 if (min(nn,S)>1)ans=max(ans,get_max(-Cm,(ll)Cm*nn-Cp,(ll)Cp*S,1,min(nn,S)-1));
26 if (S<nn)ans=max(ans,(ll)Cm*S*(nn-S));
27 ans=max(ans,(ll)Cp*S*max(nn-D1,1));
28 }
29 printf("%lld\n",ans);
30 }
31 return 0;
32 }
[hdu7026]Might and Magic的更多相关文章
- Codeforces CF#628 Education 8 D. Magic Numbers
D. Magic Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- [8.3] Magic Index
A magic index in an array A[0...n-1] is defined to be an index such that A[i] = i. Given a sorted ar ...
- Python魔术方法-Magic Method
介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",例如类的初始化方法 __init__ ,Python中所有的魔 ...
- 【Codeforces717F】Heroes of Making Magic III 线段树 + 找规律
F. Heroes of Making Magic III time limit per test:3 seconds memory limit per test:256 megabytes inpu ...
- 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree
Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...
- 一个快速double转int的方法(利用magic number)
代码: int i = *reinterpret_cast<int*>(&(d += 6755399441055744.0)); 知识点: 1.reinterpret_cast&l ...
- MAGIC XPA最新版本Magic xpa 2.4c Release Notes
New Features, Feature Enhancements and Behavior ChangesSubforms – Behavior Change for Unsupported Ta ...
- Magic xpa 2.5发布 Magic xpa 2.5 Release Notes
Magic xpa 2.5發佈 Magic xpa 2.5 Release Notes Magic xpa 2.5 Release NotesNew Features, Feature Enhance ...
- How Spring Boot Autoconfiguration Magic Works--转
原文地址:https://dzone.com/articles/how-springboot-autoconfiguration-magic-works In my previous post &qu ...
随机推荐
- Spring配置文件结构对于生成Bean的影响
Spring配置文件结构对于生成Bean的影响 有段时间忙于毕设,导致Spring学习的东西忘了很多,所以最近又开始从头看Spring的基础.基础的Bean的装配不再多说了.这一次,主要是深入一点了解 ...
- Oracle数据泵数据迁移
1 表空间查询 1.1 检查用户与表空间对应情况 select username,default_tablespace from dba_users; 1.2 查看临时表空间 select ta ...
- C++核心编程 3 函数提高
函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的: 语法:返回值类型 函数名 (参数 = 默认值){ } 实例: #include<iostream> using name ...
- Golang通脉之流程控制
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码. ...
- 《python编程:从入门到实践》课后习题及答案
转载: <Python编程:从入门到实践>课后习题及答案-码农之家 (xz577.com) <Python编程:从入门到实践>课后习题及答案 - 信德维拉 - 博客园 (cnb ...
- bash反弹shell
part1:不求甚解的本地复现 攻击端Debian 10.x: 192.168.208.134 受害端Ubuntu : 192.168.208.135 攻击端打开(监听)某端口: 键入命令:[nc ...
- 【UE4】GAMES101 图形学作业0:矩阵初识
作业描述 给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算). UE4 知识点 主要矩阵 FMatrix FBasisVec ...
- 性能利器 Takin 来了!首个生产环境全链路压测平台正式开源
6 月 25 日,国内知名的系统高可用专家数列科技宣布开源旗下核心产品能力,对外开放生产全链路压测平台产品的源代码,并正式命名为 Takin. 目前中国人寿.顺丰科技.希音.中通快递.中国移动.永辉超 ...
- [HNOI2009]双递增序列(洛谷P4728)+小烈送菜(内部训练题)——奇妙的dp
博主学习本题的经过嘤嘤嘤: 7.22 : 听学长讲(一知半解)--自己推(推不出来)--网上看题解--以为自己会了(网上题解是错的)--发现错误以后又自己推(没推出来)--给学长发邮件--得到正确解法 ...
- PCIE学习链接集合
<PCIE基础知识+vivado IP core设置> https://blog.csdn.net/eagle217/article/details/81736822 <一步一步开始 ...