小视野链接
洛谷链接
###题目大意
一个 n ∗ m n*m n∗m的网格上有一些黑点和一个出口。每次操作使所有黑点向上下左右中的任意一个方向移动一格。若移出边界则消失,移至出口则收集起来。问最终收集到的黑点数量最大值。
###题解
所有黑点的移动相当于出口和网格的移动,每动一下,相当于把某一行(列)去掉。
DP,设 f [ i ] [ j ] [ k ] [ l ] f[i][j][k][l] f[i][j][k][l]表示出口上下左右最多移动分别 i , j , k , l i,j,k,l i,j,k,l次的答案。转移方程见代码。边界为 f [ 0 ] [ 0 ] [ 0 ] [ 0 ] = 0 f[0][0][0][0]=0 f[0][0][0][0]=0。注意判断剩余的行(列)是否大于移动的步数。
###代码

//#pragma GCC optimize(3)
#include<iostream>
#include<iomanip>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#define ll long long
#define db double
#define inf 101
#define INF (int)1e9
#define pi acos(-1)
#define rd(n) {n=0;char ch;int f=0;do{ch=getchar();if(ch=='-'){f=1;}}while(ch<'0'||ch>'9');while('0'<=ch&&ch<='9'){n=(n<<1)+(n<<3)+ch-48;ch=getchar();}if(f)n=-n;}
using namespace std;int mp[inf][inf],sum[inf][inf],f[inf][inf][inf];
int n,m;int getsum(int l1,int l2,int r1,int r2){return sum[r1][r2]-sum[l1-1][r2]-sum[r1][l2-1]+sum[l1-1][l2-1];
}int main(){rd(n) rd(m)char ch;int ex,ey;for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){ch=getchar();while (ch!='o' && ch!='.' && ch!='E'){ch=getchar();}if (ch=='o'){mp[i][j]=1;}else if (ch=='E'){ex=i,ey=j;}}}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){sum[i][j]=mp[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];}}int ans=0;for (int i=0;ex-i>=1;i++){for (int j=0;ex+j<=n;j++){int l1=max(ex-i,j+1),r1=min(ex+j,n-i);if (l1>r1){continue;}for (int k=0;ey-k>=1;k++){for (int l=0;ey+l<=m;l++){int l2=max(ey-k,1+l),r2=min(ey+l,m-k);if (l2>r2){continue;}ans=max(ans,f[j][k][l]);if (i+j<n-ex){f[j+1][k][l]=max(f[j+1][k][l],f[j][k][l]+getsum(ex+j+1,l2,ex+j+1,r2));}if (k+l<ey-1){f[j][k+1][l]=max(f[j][k+1][l],f[j][k][l]+getsum(l1,ey-k-1,r1,ey-k-1));}if (k+l<m-ey){f[j][k][l+1]=max(f[j][k][l+1],f[j][k][l]+getsum(l1,ey+l+1,r1,ey+l+1));}if (i+j<ex-1){f[j][k][l]=max(f[j][k][l],f[j][k][l]+getsum(ex-i-1,l2,ex-i-1,r2));}}}}}printf("%d\n",ans);return 0;
}

【国集作业】【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 (DP)

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

  5. agc004E Salvage Robots

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

  6. [agc004e]Salvage Robots

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

  7. 震惊!快速幂怎么编?省一说暴力,银牌说递归,国集听完笑了

    国集:打表啊!! 题目描述 给你三个整数 b,p,kb,p,kb,p,k,求 bp mod kb^p \bmod kbpmodk. 输入格式 输入只有一行三个整数,分别代表 b,p,kb,p,kb,p ...

  8. 【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 ...

  9. atcoder【AGC004E】Salvage Robots

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

最新文章

  1. 有了这个科研思路,高水平SCI就在手边!
  2. 设计模式复习-模板方法模式
  3. 概述VB.NET正则表达式简化程序代码
  4. 刷前端面经笔记(十二)
  5. boost::fusion::none用法的测试程序
  6. 【JQuery】初始化页面当异步加载时构建页面元素的顺序
  7. python ddos 检测系统_python 检查是否存在ddos攻击
  8. 实验楼python3中挑战一_实验楼python3学习挑战项目
  9. Zookeeper Tutorial 1 -- Overview
  10. DevOps使用教程 华为云(16)git 日志记录 比较2次提交差异
  11. 西安电子科技大学833真题_【考研名校】2021西安电子科技大学考研资料及历年真题解析汇总...
  12. 中国文化和旅游部长:肯定《吴哥王朝》培养本地演员
  13. matlab编程求卫星轨道长度,GPS卫星轨道计算及其MATLAB仿真.pdf
  14. ubantu 防火墙
  15. 善于抓住80后消费者的消费心理
  16. 51单片机c语言控制led显示屏,51单片机的中断方法以及对LED显示器的控制设计
  17. 期刊不收版面费,天下寒士俱欢颜
  18. thinkPHP+jQuery实现站内信功能-讲给菜鸟同学
  19. openssl 1.0.2k-fips 升级到 openssl-3.0.5
  20. python与Geant4的socket通信

热门文章

  1. 如何在word中插入latex公式和伪代码
  2. 图神经网络与图注意力网络相关知识概述
  3. js收起手机软件键盘
  4. 一种可能的投资策略和一种可能的模糊的快速股票估值方法
  5. Go开发 之 容器(数组Array、切片slice、映射map、列表list)
  6. 量化投资可转债策略--源代码
  7. 中国通信服务股份有限公司之广通服的划分!
  8. 常见设计模式—抽象工厂模式
  9. C语言实现函数确定最大最小值
  10. vue中使用电子签名