[二维区间DP?] Atcoder ARC004E. Salvage Robots
可以让出口移动,robots不动
fu,d,l,r f_{u,d,l,r} 表示出口活动的区域为 (x−u,y−l) (x-u,y-l) 到 (x+d,y+r) (x+d,y+r) 这个矩形时最多能救多少机器人。转移的话,画画图可以知道哪些区域求不了
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N=105;int n,m,x,y,L[N][N],R[N][N];
char a[N][N];short f[N][N][N][N],ans;inline void fix(short &x,short y){if(x<y) x=y;
}int main(){freopen("1.in","r",stdin);freopen("1.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%s",a[i]+1);for(int j=1;j<=m;j++){if(a[i][j]=='E') x=i,y=j;L[i][j]=L[i][j-1]+(a[i][j]=='o');R[i][j]=R[i-1][j]+(a[i][j]=='o');}}memset(f,-0x7f,sizeof(f)); f[0][0][0][0]=0;for(int u=0;x-u>0;u++)for(int d=0;x+d<=n;d++)for(int l=0;y-l>0;l++)for(int r=0;y+r<=m;r++){if(f[u][d][l][r]<0) continue;short cur=f[u][d][l][r]; ans=max(ans,cur);if(x-d>u+1 && x-u-1>0)fix(f[u+1][d][l][r],cur+L[x-u-1][min(y+r,m-l)]-L[x-u-1][max(y-l-1,r)]);if(x+u+d<n && x+d+1<=n)fix(f[u][d+1][l][r],cur+L[x+d+1][min(y+r,m-l)]-L[x+d+1][max(y-l-1,r)]);if(y+l+r<m && y+r+1<=m)fix(f[u][d][l][r+1],cur+R[min(x+d,n-u)][y+r+1]-R[max(x-u-1,d)][y+r+1]);if(y-r>l+1 && y-l-1>0)fix(f[u][d][l+1][r],cur+R[min(x+d,n-u)][y-l-1]-R[max(x-u-1,d)][y-l-1]);}printf("%d\n",(int)ans);return 0;
}
[二维区间DP?] Atcoder ARC004E. Salvage Robots相关推荐
- ZROI 2021 10联day8 T1 题(期望+二维区间DP)
你要在一片菜地里捉兔子. 菜地形如一个一个 N×M 的长方形网格,每个顶点要么是空的,要么有一个兔子洞.在每个洞里有恰好 44 只兔子.在土地的四个角都设置了逮兔陷阱(陷阱在坐标 [0,0],[0,M ...
- 不止代码:ybtoj-棋盘分割(二维区间dp)
题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了n-1次后,连同最后剩下的矩形棋盘共有n块矩形棋盘. (每次切割都只能沿着棋 ...
- The UVALIVE 7716 二维区间第k小
The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...
- AtCoder AGC004E Salvage Robots (DP)
题目链接 https://atcoder.jp/contests/agc004/tasks/agc004_e 题解 本题的难度不在于想到大体思路,而在于如何把代码写对.. 首先我们可以不让机器人动,让 ...
- 【2021牛客暑期多校训练营5】Double Strings(二维字符串dp)
D Double Strings 题意: 给出两个字符串A, B, 在其中选出两个等长的子序列(可以不连续)a, b,满足a的字典序严格小于b,求这样的方案有多少个,答案mod(1e9+7) 思路: ...
- CF:E. Moving Chips【二维双dp + dp灵活交叉】
分析 记录*第一次出现的列l和最后出现的列r 然后dp1表示汇聚到当前列的上行的cost dp2表示汇聚到当前列的下行的cost 初始化的话 dp1就是在第L列汇聚到上行的cost,显然如果下行有的话 ...
- CKOJ 1066: 地形编辑器(整个区间加减一个数,多次区间操作,处理端点,但这是二维的,骚操作(有dp思想))
1066: 地形编辑器 时间限制: 1 Sec 内存限制: 128 MB 提交: 32 解决: 4 [ 提交][ 状态][ 讨论版] 题目描述 zdw很喜欢玩红警, 他经常制作一些奇奇怪怪的红 ...
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★
P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...
最新文章
- linux 执行程序 注销,Linux登录登出的过程 | Soo Smart!
- R语言与数据分析(12)向量
- 高级停靠(Dock)技术的实现
- VTK:几何对象之Vertex
- [Training Video - 1] [Selenium Basics] [Download and Install Selenium]
- 教你在Yii2.0框架中如何创建自定义小部件
- api查询所有记录 zabbix_通过Zabbix API获取历史监控数据
- Ubuntu 14.04 安装 JDK 8,ubuntu14.04
- 用简单Mask分类实现语义分割、实例分割“大一统”!FacebookUIUC开源MaskFormer
- 锐捷 重启计算机,关于锐捷客户端重安装后要求反覆重启的解决办法
- java编程语言基础
- web项目中镶嵌player
- 老毛桃PE工具去除捆绑软件的方法
- PayPal第一次提现失败手续费返还教程
- Golang 内建类型和内建函数 builtin包 注释翻译
- Excel将其他单元格的数据合并成一个单元格
- 安全多方计算 # 个人笔记
- 大学物理电磁学——磁场两条定理
- MySQLIntegrityConstraintViolationException: Duplicate entry ‘10xxxx-50xxxx‘ for key ‘xxx‘
- Python就业可选方向有哪些?带你了解Python主流职业选择!
热门文章
- mysql语言中子查询是什么_SQL查询语句中,什么叫子查询?
- COM:根系微生物组研究中的合成群落还原法
- python基础——文件与IO
- 研华电脑510上电自启_研华工控机BIOS设置通电自启动方法技巧
- 初次入坑解析的小程序(决定写代码风格的小程序)
- Golang 入门 : 结构体(struct)
- 湖南大学计算机通信学院陈果,湖南大学考研研究生导师简介-陈果
- python 合并word文件_python读取word合并单元格
- 华为笔记本电脑计算机在哪里打开,华为笔记本电脑有摄像头吗
- Android格子视图的另外一种实现方式之Images3LinearLayout(9宫格/九宫格)