设$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))$。

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N=505,M=255;
  5. 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;
  6. inline bool cmp(int x,int y){return x>y;}
  7. inline void up(int&x,int y){if(x<y)x=y;}
  8. void solve(int l,int r,int dl,int dr){
  9. int m=(l+r)>>1,dm=dl,&f=v[m];
  10. for(int i=dl;i<=dr&&i<=m;i++){
  11. int t=g[m-i]+q[i];
  12. if(t>f)f=t,dm=i;
  13. }
  14. if(l<m)solve(l,m-1,dl,dm);
  15. if(r>m)solve(m+1,r,dm,dr);
  16. }
  17. int main(){
  18. scanf("%d%d%d%d",&n,&m,&R,&T);
  19. for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&a[i][j]);
  20. _n=max(1,n-R),_m=max(1,m-R);
  21. 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];
  22. if(cnt){
  23. sort(q+1,q+cnt+1,cmp);
  24. for(i=1;i<=cnt&&i<=T;i++)f[1][1][i]=f[1][1][i-1]+q[i];
  25. for(;i<=T;i++)f[1][1][i]=f[1][1][i-1];
  26. }
  27. for(i=o=1;i<=_n;i++,o^=1)for(j=1;j<=_m;j++){
  28. lim=T-i-j+2;
  29. if(lim<=0)continue;
  30. if(i>1){
  31. for(k=0;k<=lim;k++)g[k]=v[k]=f[o^1][j][k];
  32. cnt=0;
  33. 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];
  34. if(cnt){
  35. sort(q+1,q+cnt+1,cmp);
  36. for(k=1;k<=cnt;k++)q[k]+=q[k-1];
  37. solve(1,lim,0,cnt);
  38. }
  39. for(k=0;k<=lim;k++)f[o][j][k]=v[k];
  40. }
  41. if(j>1){
  42. for(k=0;k<=lim;k++)g[k]=v[k]=f[o][j-1][k];
  43. cnt=0;
  44. 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];
  45. if(cnt){
  46. sort(q+1,q+cnt+1,cmp);
  47. for(k=1;k<=cnt;k++)q[k]+=q[k-1];
  48. solve(1,lim,0,cnt);
  49. }
  50. for(k=0;k<=lim;k++)up(f[o][j][k],v[k]);
  51. }
  52. up(ans,f[o][j][lim]);
  53. }
  54. return printf("%d",ans),0;
  55. }

  

BZOJ1897 : tank 坦克游戏的更多相关文章

  1. bzoj1897. tank 坦克游戏(决策单调性分治)

    题目描述 有这样一款新的坦克游戏.在游戏中,你将操纵一辆坦克,在一个N×M的区域中完成一项任务.在此的区域中,将会有许多可攻击的目标,而你每摧毁这样的一个目标,就将获得与目标价值相等的分数.只有获得了 ...

  2. 1897. tank 坦克游戏

    传送门 显然考虑 $dp$,发现时间只和当前位置和攻击次数有关,设 $F[i][j][k]$ 表示当前位置为 $i,j$ ,攻击了 $k$ 次得到的最大分数 初始 $f[1][1][k]$ 为位置 $ ...

  3. 887C. Slava and tanks#轰炸弹坦克游戏(分析)

    题目出处:http://codeforces.com/problemset/problem/877/C 题目大意:按照游戏规则,求最小炸弹使用次数 #include<iostream> u ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. Java 坦克小游戏心得

    原本是闲得慌无聊才去尝试做这个项目的,因为小时候玩小霸王的游戏机,那个时候经常玩这个游戏吧,特别是喜欢那种自定义地图的模式,觉得自由度非常不错.总之关于这个游戏,想说的一大堆.鉴于能有个空闲的时间,打 ...

  6. java学习之坦克大战游戏

    总结:由于这几天快过年比较忙然后没怎么写,写代码途中一些经验总结现在给忘记了.这次的小项目感觉比上次写的思路清楚了点.没有之前第一次写那么逻辑混乱,结构也搞的比之前的要好,添加功能比较容易.学习了之前 ...

  7. Java实现简易联网坦克对战小游戏

    目录 介绍 本项目的Github地址 基础版本 游戏的原理, 图形界面(非重点) 游戏逻辑 网络联机 客户端连接上服务器 定义应用层协议 TankNewMsg TankMoveMsg MissileN ...

  8. 自制Unity小游戏TankHero-2D(2)制作敌方坦克

    自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

  9. 自制Unity小游戏TankHero-2D(1)制作主角坦克

    自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

随机推荐

  1. 论文阅读笔记二十五:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPPNet CVPR2014)

    论文源址:https://arxiv.org/abs/1406.4729 tensorflow相关代码:https://github.com/peace195/sppnet 摘要 深度卷积网络需要输入 ...

  2. MySql-8.0.12 安装教程

    MySql-8.0.12 安装教程随笔https://www.cnblogs.com/CrazyDemo/p/9409995.html MySQL 安装https://m.runoob.com/mys ...

  3. MyBatis-Plus工具快速入门

    MyBatis-Plus官方文档:http://mp.baomidou.com/#/quick-starthttp://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A ...

  4. Git基础(二) 文件的生命周期

    使用Git时,文件的生命周期如下:

  5. (Access denied for user 'root'@'slaver1' (using password: YES))

    1.问题描述,启动azkaban的时候报如下所示的错误.之前使用azkaban是root用户,今天使用hadoop用户进行配置和使用,报这个错,说是root连接mysql拒绝了. [hadoop@sl ...

  6. SpringBoot学习(3)-SpringBoot添加支持CORS跨域访问

    SpringBoot学习(3)-SpringBoot添加支持CORS跨域访问 https://blog.csdn.net/yft_android/article/details/80307672

  7. Temporal Segment Networks

    摘要 解决问题 用CNN框架有效提取video长时序特征 在UCF101等训练集受限的情况下训练网络 贡献 TSN网络,基于长时间时序结构模型.稀疏时序采样策略,视频层监督有效学习整个视频. HMDB ...

  8. 【BZOJ4998】星球联盟

    题解: 应该还是比较水的 首先很容易发现的就是两个点一旦联通他们就永远联通了 所以联通之后我们就把他们之间缩成一个点

  9. JAXB在Java 9/10并且使用Tomcat 9的问题

    Implementation of JAXB-API has not been found on module path or classpath. JAXB API是java EE 的API,jav ...

  10. 工作记录之 [ python请求url ] v s [ java请求url ]

    背景: 模拟浏览器访问web,发送https请求url,为了实验需求需要获取ipv4数据包 由于不做后续的内容整理(有内部平台分析),故只要写几行代码请求发送https请求url列表中的url即可 开 ...