BZOJ1897 : tank 坦克游戏
设$f[i][j][k]$表示坦克位于$(i,j)$,目前打了不超过$k$个位置的最大得分。
初始值$f[1][1][k]$为在$(1,1)$射程内最大$k$个位置的分数总和。
对于每次移动,会新增一行或者一列$O(R)$个位置,那么显然也是从大到小取。
暴力转移是$O(R)$的,不能接受,但是注意到这是个凸函数,故存在决策单调性,分治求解即可。
$ans=\max(f[i][j][T-i-j+2])$
时间复杂度$O(nm(T+R\log R))$。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=505,M=255;
int T,n,m,R,_n,_m,lim,o,i,j,k,a[N][N],f[2][N][M],g[M],v[M],q[N*N],cnt,ans;
inline bool cmp(int x,int y){return x>y;}
inline void up(int&x,int y){if(x<y)x=y;}
void solve(int l,int r,int dl,int dr){
int m=(l+r)>>1,dm=dl,&f=v[m];
for(int i=dl;i<=dr&&i<=m;i++){
int t=g[m-i]+q[i];
if(t>f)f=t,dm=i;
}
if(l<m)solve(l,m-1,dl,dm);
if(r>m)solve(m+1,r,dm,dr);
}
int main(){
scanf("%d%d%d%d",&n,&m,&R,&T);
for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&a[i][j]);
_n=max(1,n-R),_m=max(1,m-R);
for(i=1;i<=n&&i<=R+1;i++)for(j=1;j<=m&&j<=R+1;j++)if(a[i][j]>0)q[++cnt]=a[i][j];
if(cnt){
sort(q+1,q+cnt+1,cmp);
for(i=1;i<=cnt&&i<=T;i++)f[1][1][i]=f[1][1][i-1]+q[i];
for(;i<=T;i++)f[1][1][i]=f[1][1][i-1];
}
for(i=o=1;i<=_n;i++,o^=1)for(j=1;j<=_m;j++){
lim=T-i-j+2;
if(lim<=0)continue;
if(i>1){
for(k=0;k<=lim;k++)g[k]=v[k]=f[o^1][j][k];
cnt=0;
if(i+R<=n)for(k=max(1,j-R);k<=m&&k<=j+R;k++)if(a[i+R][k]>0)q[++cnt]=a[i+R][k];
if(cnt){
sort(q+1,q+cnt+1,cmp);
for(k=1;k<=cnt;k++)q[k]+=q[k-1];
solve(1,lim,0,cnt);
}
for(k=0;k<=lim;k++)f[o][j][k]=v[k];
}
if(j>1){
for(k=0;k<=lim;k++)g[k]=v[k]=f[o][j-1][k];
cnt=0;
if(j+R<=m)for(k=max(1,i-R);k<=n&&k<=i+R;k++)if(a[k][j+R]>0)q[++cnt]=a[k][j+R];
if(cnt){
sort(q+1,q+cnt+1,cmp);
for(k=1;k<=cnt;k++)q[k]+=q[k-1];
solve(1,lim,0,cnt);
}
for(k=0;k<=lim;k++)up(f[o][j][k],v[k]);
}
up(ans,f[o][j][lim]);
}
return printf("%d",ans),0;
}
BZOJ1897 : tank 坦克游戏的更多相关文章
- bzoj1897. tank 坦克游戏(决策单调性分治)
题目描述 有这样一款新的坦克游戏.在游戏中,你将操纵一辆坦克,在一个N×M的区域中完成一项任务.在此的区域中,将会有许多可攻击的目标,而你每摧毁这样的一个目标,就将获得与目标价值相等的分数.只有获得了 ...
- 1897. tank 坦克游戏
传送门 显然考虑 $dp$,发现时间只和当前位置和攻击次数有关,设 $F[i][j][k]$ 表示当前位置为 $i,j$ ,攻击了 $k$ 次得到的最大分数 初始 $f[1][1][k]$ 为位置 $ ...
- 887C. Slava and tanks#轰炸弹坦克游戏(分析)
题目出处:http://codeforces.com/problemset/problem/877/C 题目大意:按照游戏规则,求最小炸弹使用次数 #include<iostream> u ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Java 坦克小游戏心得
原本是闲得慌无聊才去尝试做这个项目的,因为小时候玩小霸王的游戏机,那个时候经常玩这个游戏吧,特别是喜欢那种自定义地图的模式,觉得自由度非常不错.总之关于这个游戏,想说的一大堆.鉴于能有个空闲的时间,打 ...
- java学习之坦克大战游戏
总结:由于这几天快过年比较忙然后没怎么写,写代码途中一些经验总结现在给忘记了.这次的小项目感觉比上次写的思路清楚了点.没有之前第一次写那么逻辑混乱,结构也搞的比之前的要好,添加功能比较容易.学习了之前 ...
- Java实现简易联网坦克对战小游戏
目录 介绍 本项目的Github地址 基础版本 游戏的原理, 图形界面(非重点) 游戏逻辑 网络联机 客户端连接上服务器 定义应用层协议 TankNewMsg TankMoveMsg MissileN ...
- 自制Unity小游戏TankHero-2D(2)制作敌方坦克
自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
- 自制Unity小游戏TankHero-2D(1)制作主角坦克
自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...
随机推荐
- Python函数之匿名函数
一:概述 匿名函数主要用来处理比较简单的逻辑,用一行显示,并将运算结果作为返回值返回 二:书写规则 函数名 = lambda 参数:返回值 参数可以有多个,多个参数使用逗号分隔 三 :例子 将func ...
- Python_网络编程udp-飞秋自动攻击
# 模拟一个接收数据import socketimport time def auto_hack(udp_socket, recv_msg, revc_ip, revc_port=2425): # 发 ...
- 升级 Apache Tomcat的办法
1.下载最新的7系列tomcat cd /usr/local/software wget https://www-us.apache.org/dist/tomcat/tomcat-7/v7.0.92/ ...
- Nginx安装配置&反向代理
使用Nginx作为前端服务能够更快更及时的响应静态页面.js.图片等,当客户端请求访问动态页面时由Nginx的反向代理给Apache处理,Apache处理完再交予Nginx返回给客户端. Nginx更 ...
- 阿里 Goldeneye 四个环节落地智能监控:预测、检测、报警及定位
阿里 Goldeneye 四个环节落地智能监控:预测.检测.报警及定位 https://www.infoq.cn/article/alibaba-goldeneye-four-links
- 无法连接ssh,fatal: daemon() failed: No such device
今天发现一个服务器的sshd无法启动,查看/var/log/secure里发现:fatal: daemon() failed: No such device 解决办法: rm /dev/null /d ...
- document.createDocumentFragment()运行效率
createDocumentFragment作用是什么? 快速响应,提高效率,提升用户体验. 调用document.body.append(),每调用一次都要刷新页面 一次.效率就低了. 用docum ...
- Derive representation formula from Green’s identity
This article introduces how to derive the representation formula used in BEM from Green's identity. ...
- HTML5漫谈(7)——如何保护HTML5应用代码
独家供稿:移动Labs HTML5应用采用的仍然是Javascript(JS).HTML.CSS 等Web语言,因而其代码保护就是这些Web代码的保护,而HTML5应用主要功能一般采用JS实现,因此J ...
- python全栈开发day73-Django认证系统
一.Form组件 day73 2018-08-10 1. 内容回顾 1. form表单组件 1. 常用字段 1. CharField() 2. ChoiceField() 2. 参数或配置 1. la ...