BZOJ4828 AHOI/HNOI2017大佬(动态规划+bfs)
注意到怼大佬的操作至多只能进行两次。我们逐步简化问题。
首先令f[i][j]表示第i天结束后自信值为j时至多有多少天可以进行非防御操作(即恢复自信值之外的操作)。这个dp非常显然。由于最终只需要保证存活,那么取f中的最大值即可(可以在第n天之前使大佬自信值为0而结束),之后就不用再管自己的自信值。复杂度是O(n·mc),数据范围远远没有开满,可能是怕提示做法吧。
现在知道了有多少天可以用来攻击(当然可以有些天划水)。对于攻击操作,哪一天进行是没有区别的。那么先不考虑还嘴操作。
只剩下怼大佬的操作了。先看一次。虽然值域很大,操作方案数也是指数级别,但发现总共能打出来的在值域范围内的伤害种类数在可以接受的范围内。具体有多少我也不知道,总之我们可以暴搜剪剪枝map判个重(伤害和等级都相等),把所有可行伤害算出来。
于是知道了用x天怼大佬可以造成的所有可行伤害。最多可以怼两次,那么给两次怼操作分配天数,当然还有还嘴操作。
假设总共n天,给两次怼操作分配的天数分别为d1,d2,造成的伤害分别为w1,w2。如果能怼死大佬,则其满足w1+w2<=q<=w1+w2+n-(d1+d2)。这样不用考虑n的总天数限制。如果枚举d1和w1,由前一个式子,随着w1减小,满足条件的最大的w2会增大。而由后一个式子,显然应让w2-d2尽量大。于是我们按照w排序,从大到小枚举w1,并记录w2-d2的最大值就可以了。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 110
#define inf 100000001
int n,m,Q,a[N],w[N],f[N][N],head,tail;
map<long long,bool> g;
struct data
{
int d,l,w;
bool operator <(const data&a) const
{
return w<a.w;
}
}q[];
long long calc(int x,int y){return 1ll*(n+)*x+y;}
void bfs()
{
q[tail=]=(data){,,};g[calc(,)]=;
do
{
head++;if (q[head].d==n) break;
if (q[head].l>&&1ll*q[head].w*q[head].l<inf&&!g[calc(q[head].w*q[head].l,q[head].l)]) g[calc(q[head].w*q[head].l,q[head].l)]=,q[++tail]=(data){q[head].d+,q[head].l,q[head].w*q[head].l};
if (1ll*q[head].w*(q[head].l+)<inf&&!g[calc(q[head].w,q[head].l+)]) g[calc(q[head].w,q[head].l+)]=,q[++tail]=(data){q[head].d+,q[head].l+,q[head].w};
}while (head<tail);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4828.in","r",stdin);
freopen("bzoj4828.out","w",stdout);
const char LL[]="%I64d";
#else
const char LL[]="%lld";
#endif
n=read(),Q=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<=n;i++) w[i]=read();
memset(f,,sizeof(f));
f[][m]=;
for (int i=;i<n;i++)
for (int j=a[i+];j<=m;j++)
{
f[i+][min(m,j-a[i+]+w[i+])]=max(f[i+][min(m,j-a[i+]+w[i+])],f[i][j]);
f[i+][j-a[i+]]=max(f[i+][j-a[i+]],f[i][j]+);
}
int v=;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
v=max(v,f[i][j]);
n=v;
bfs();
sort(q+,q+tail+);
q[].d=q[].l=q[].w=;
while (Q--)
{
int x=read(),mx=-inf,p=-;
int flag=;
for (int j=tail;j>=;j--)
{
while (p<tail&&q[p+].w+q[j].w<=x)
p++,mx=max(mx,q[p].w-q[p].d);
if (q[j].w-q[j].d+mx+n>=x) {flag=;break;}
}
cout<<flag<<endl;
}
return ;
}
BZOJ4828 AHOI/HNOI2017大佬(动态规划+bfs)的更多相关文章
- [bzoj4828][Ah/Hnoi2017]大佬
来自FallDream的博客,未经允许,请勿转载,谢谢. 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你 ...
- [AH2017/HNOI2017]大佬(动态规划 搜索)
/* 神仙yyb 理解题意可以发现 能够对大佬造成的伤害只和你怼了多少天大佬有关, 而且显然天数越多越好 那么我们可以先通过预处理来找出我们最多能够怼多少天大佬 然后我们发现最后我们能怼的血量状态数是 ...
- [HNOI2017] 大佬 - DP,BFS,Hash,单调性
这真的是一道综合题.然而感觉A得莫名其妙,交上去的时候其实非常虚,然后就莫名其妙地AC了? 首先我们考虑到,所有和怼有关的操作都是时刻无关的.也就是说,我们把这些操作拆散放到任何时候都对结果不会有影响 ...
- loj #2021. 「AHOI / HNOI2017」大佬
#2021. 「AHOI / HNOI2017」大佬 题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢 ...
- loj#2020 「AHOI / HNOI2017」礼物 ntt
loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变 ...
- 「AHOI / HNOI2017」单旋
「AHOI / HNOI2017」单旋 题目链接 H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种 ...
- 「AHOI / HNOI2017」影魔
「AHOI / HNOI2017」影魔 题目描述 解决这类比较复杂的区间贡献问题关键在于找到计算的对象. 比如这道题,我们计算的对象就是区间中间的最大值. 对于点\(i\),我们找到左边第一个比他大的 ...
- loj #2023. 「AHOI / HNOI2017」抛硬币
#2023. 「AHOI / HNOI2017」抛硬币 题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个 ...
- [LOJ 2022]「AHOI / HNOI2017」队长快跑
[LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...
随机推荐
- 博客搬家了qwq
呃,其实也不是搬家了,应该算是逐渐过渡qwq \[\color{skyblue}{Orchid} \color{purple}{any}\] 好的,我在学校里并不可以用Hexo,因为deploy总是挂 ...
- [01-01] 示例:用Java爬取新闻
1.分析url <空港双流>数字报刊,访问地址为:http://epaper.slnews.net.cn,现在为了抓取每篇新闻的网页内容. 在浏览器访问该链接后,发现链接出现了变化,看样子 ...
- github打开慢,甚至打不开
有人使用github后,在某些网络下发现打开慢,甚至打不开,这都是因为他是国外站:目前互联网的连接机制导致超过一定的路由节点的连接就会出现这个问题,解决办法就是直接告诉本机ip.不要先层层询问域名转i ...
- 在centos 7上安装BIMServer
下载bimserverwar-1.5.85.war https://github.com/opensourceBIM/BIMserver/releases mkdir -p /opt/bim cd / ...
- Can't connect to MySQL server (10060)
前天刚装的MySql,今天再次使用就出现了标题显示的错误.我是本地机器连接Linux下的MySql. 网上有一些解决方案: 方法一.检查本地的防火墙 如果是如上状态,请关闭防火墙再试. 方法二.检查服 ...
- 在SpringMVC中使用HandlerInterceptor来实现拦截器功能
需求:我们需要在请求某些特定的URL(URL格式为Restful格式)时添加拦截器,以实现进行权限控制. 如:/ResourcePlan/projectCode/P1503127828/PROJECT ...
- Bootstrap Search Suggest 下拉框模糊查询
源码地址:https://github.com/lzwme/bootstrap-suggest-plugin 有时间会完善!暂时有点忙!
- [T-ARA][ORGR]
歌词来源:http://music.163.com/#/song?id=29343993 作曲 : 4번타자/에스킴 [作曲 : 4p/beon-Ta-c/ja-/e-seu-Kim] 作词 : 4번 ...
- MongoDB集群运维笔记
前面的文章介绍了MongoDB副本集和分片集群的做法,下面对MongoDB集群的日常维护操作进行小总结: MongDB副本集故障转移功能得益于它的选举机制.选举机制采用了Bully算法,可以很方便从分 ...
- Linux内核第七节 20135332武西垚
预处理.编译.链接和目标文件的格式 可执行程序是怎么得来的 以C语言为例,c代码经过编译器的预处理,编译成汇编代码,由汇编器编译成目标代码,再链接成可执行文件,由操作系统加载到cpu里来执行. (截图 ...