Description

蛤蟆国的领土我们可以抽象为H*W的笼子,在这片蛤土上,有若干个机器人和一个出口,其余都是空地,每次蛤蟆会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被蛤蟆活摘出来,当机器人移出笼子时会自焚,求你最多取出的多少个机器人。

Input

第一行两个整数H,W,如题目所述
接下来H行,每行W个字符,包含三类字符:
第一类是'.'表示空地
第二类是'o'表示有一个机器人
第三类是'E'表示有一个出口,出口有且仅有一个

Output

一行,活摘的机器人个数

Sample Input

3 3
o.o
.Eo
ooo

Sample Output

3

HINT

H,W≤100

补充样例:

3 4
o...
o...
oooE
输出:5
5 11
ooo.ooo.ooo
o.o.o...o..
ooo.oE..o..
o.o.o.o.o..
o.o.ooo.ooo
输出:12

Sol

首先转化成矩形和格子走。

我们设\(f[i][j][k][l]\)表示起点向左最远走过i步,向右最远走过j步,向上最远走过k步,向下最远走过l步能够最大覆盖的机器人数量。

那么我们转移的时候去掉已经出格的,加上转移的时候新增的量即可(一定是一个连续的序列,所以可以用前缀和预处理)。

注意细节边界问题非常多。

开short,否则爆空间。

Code

#include<bits/stdc++.h>
using namespace std;
short f[102][102][102][102],s1[102][102],s2[102][102],ans;int n,m,x,y;char c[102][102];
int main()
{    scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%s",c[i]+1);for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(c[i][j]=='E') x=i,y=j;for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) s1[i][j]=s1[i][j-1]+(c[i][j]=='o'),s2[i][j]=s2[i-1][j]+(c[i][j]=='o');for(int a=0;a<x;a++) for(int b=0;b<=n-x;b++) for(int c=0;c<y;c++) for(int d=0;d<=m-y;d++){   int U=b+1,D=n-a,L=d+1,R=m-c;ans=max(ans,f[a][b][c][d]);if(U<x-a) f[a+1][b][c][d]=max((int)f[a+1][b][c][d],f[a][b][c][d]+s1[x-a-1][min(R,y+d)]-s1[x-a-1][max(L,y-c)-1]);if(x+b<D) f[a][b+1][c][d]=max((int)f[a][b+1][c][d],f[a][b][c][d]+s1[x+b+1][min(R,y+d)]-s1[x+b+1][max(L,y-c)-1]);if(L<y-c) f[a][b][c+1][d]=max((int)f[a][b][c+1][d],f[a][b][c][d]+s2[min(D,x+b)][y-c-1]-s2[max(U,x-a)-1][y-c-1]);if(y+d<R) f[a][b][c][d+1]=max((int)f[a][b][c][d+1],f[a][b][c][d]+s2[min(D,x+b)][y+d+1]-s2[max(U,x-a)-1][y+d+1]);}printf("%d\n",ans);
}

转载于:https://www.cnblogs.com/CK6100LGEV2/p/9508068.html

[agc004e]Salvage Robots dp相关推荐

  1. AGC004E - Salvage Robots(dp,思维)

    AGC004E - Salvage Robots Solution 怎么又双叒叕遇到和NOIP2020T4NOIP2020T4NOIP2020T4和那道CFCFCF题一样的题了啊,惨痛回忆QAQQAQ ...

  2. AtCoder AGC004E Salvage Robots (DP)

    题目链接 https://atcoder.jp/contests/agc004/tasks/agc004_e 题解 本题的难度不在于想到大体思路,而在于如何把代码写对.. 首先我们可以不让机器人动,让 ...

  3. [AGC004E] Salvage Robots (DP)

    Description 蛤蟆国的领土我们可以抽象为H*W的笼子,在这片蛤土上,有若干个机器人和一个出口,其余都是空地,每次蛤蟆会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被蛤蟆活摘出 ...

  4. agc004E Salvage Robots

    题意: 一个网格图,有若干机器人,还有一个出口. 操作一系列指令让机器人一起上下左右走,走出矩形就死,进入出口则得救. 最多救多少机器人? $W,H \leq 100$ 考虑不让所有机器人移动,而让出 ...

  5. [agc004e]Salvage Robots

    前言 本题的关键是想到让出口和矩形动,而不是机器人动,只要记录出口的位移矩形,便可以知道哪个区域的机器人已经飞出去了. 题目大意 一个网格图,有若干机器人,还有一个出口. 操作一系列指令让机器人上下左 ...

  6. 【AGC004E】Salvage Robots【动态规划dp】

    貌似我的dp和大多数写法不太一样..常数巨大. 我们设 f [ i ] [ j ] [ k ] [ l ] f[i][j][k][l] f[i][j][k][l]为剩下横坐标范围为 i t o j i ...

  7. 【国集作业】【AGC004E】Salvage Robots 【DP】

    小视野链接 洛谷链接 ###题目大意 一个 n ∗ m n*m n∗m的网格上有一些黑点和一个出口.每次操作使所有黑点向上下左右中的任意一个方向移动一格.若移出边界则消失,移至出口则收集起来.问最终收 ...

  8. atcoder【AGC004E】Salvage Robots

    Description 蛤蟆国的领土我们可以抽象为H*W的笼子,在这片蛤土上,有若干个机器人和一个出口,其余都是空地,每次蛤蟆会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被蛤蟆活摘出 ...

  9. [二维区间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) 这个矩形时最多能救 ...

最新文章

  1. 手把手重现Science的主图Maptree
  2. mysql grant 不想让用户看到 系统默认 mysql_MYSQL用户权限管理GRANT使用
  3. latex 引用_VS Code + LaTex + Zotero 写作毕业论文
  4. 作为 IT 行业的过来人,你有什么话想对后辈说的?
  5. 用友u8 12.1服务器硬件要求,用友U8-12.1安装操作手册(服务器)
  6. format not a string literal and no format arguments
  7. Hibernate注解----关联映射注解以及课程总结详解----图片版本
  8. JDK自带的java.util.Timer定时器的实现原理
  9. java股票公式源码_通达信公式转java
  10. Android多点触摸的判断
  11. windows下快速安装nginx并配置开机自启动的方法
  12. Countdownlatch、CyclicBarrier、join区别
  13. Learun FrameWork,基于.NET的智能化开发工具
  14. html+css (静态页面+动画案例)
  15. 零信任-易安联零信任介绍(11)
  16. UnityShader Reversed-Z的理解
  17. iOS 开发者一定要知道的 14 个知识点
  18. 《机器学习实战 学习笔记》(二):端到端的机器学习项目
  19. 【PAT乙级刷题】客似云来
  20. autojs问题汇总

热门文章

  1. Oracle EBS子库存转移,项目转移whole LPN
  2. Cannot serialize; nested exception is org.springframework.core.serializer
  3. android switch模块
  4. 1008: 美元和人民币 C语言
  5. 跪了!美团Android开发工程师岗位职能要求,重难点整理
  6. js实现圆柱形轮播图
  7. 安利7个冷门好用的在线工具,每一个都足够惊艳
  8. 工具“正确”打开方式——如何用notion来谈恋爱
  9. 快速学习-处理响应数据
  10. F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)