Description

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

Input

第一行两个整数H,W,如题目所述

接下来H行,每行W个字符,包含三类字符:

第一类是’.’表示空地

第二类是’o’表示有一个机器人

第三类是’E’表示有一个出口,出口有且仅有一个

题解:

这看起来就像是一道dp题……(我TM没想出来)

我们用 f[i][j][k][l] f [ i ] [ j ] [ k ] [ l ] f[i][j][k][l] 表示我们已经把左上角为 (i,j) ( i , j ) (i,j),右下角为 (k,l) ( k , l ) (k,l) 的机器人都去掉了,最多能取多少个。

那我们状态转移的时候加入一行或者一列。

那我们要往上拓展一行时,就要看出口上方矩阵的高度要比底部剩余的高度要小才能把这些机器人都收入囊中,新加的那行的宽度就为左右剩余空格的最大值……

CODE:

#include<iostream>
#include<cstdio>
using namespace std;char map[105][105];
int n,m,x,y,ans=0,a[105][105],b[105][105];
short f[105][105][105][105];int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%s",map[i]+1);for(int j=1;j<=m;j++){a[i][j]=a[i][j-1]+(map[i][j]=='o');b[i][j]=b[i-1][j]+(map[i][j]=='o');if(map[i][j]=='E')x=i,y=j;}}for(int i=x;i>=1;i--)for(int j=y;j>=1;j--){for(int k=x;k<=n;k++)for(int l=y;l<=m;l++){if(i>1&&i-1>k-x)ans=max(ans,f[i-1][j][k][l]=max(f[i-1][j][k][l],f[i][j][k][l]+a[i-1][min(l,m-y+j)]-a[i-1][max(j-1,l-y)]));if(k<n&&n-k>x-i)ans=max(ans,f[i][j][k+1][l]=max(f[i][j][k+1][l],f[i][j][k][l]+a[k+1][min(l,m-y+j)]-a[k+1][max(j-1,l-y)]));if(j>1&&j-1>l-y)ans=max(ans,f[i][j-1][k][l]=max(f[i][j-1][k][l],f[i][j][k][l]+b[min(k,n-x+i)][j-1]-b[max(i-1,k-x)][j-1]));if(l<m&&m-l>y-j)ans=max(ans,f[i][j][k][l+1]=max(f[i][j][k][l+1],f[i][j][k][l]+b[min(k,n-x+i)][l+1]-b[max(i-1,k-x)][l+1]));}}printf("%d",ans);
}

[AGC004E] Salvage Robots (DP)相关推荐

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

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

  2. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  3. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  4. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  5. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  6. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  7. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  8. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  9. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

最新文章

  1. 年度盛宴——2012年最精彩的15个 CSS3 教程
  2. 敏捷开发本质 与 敏捷个人本质
  3. ES6 WeakMap的实际用途是什么?
  4. python田字格的输出的两种方法
  5. Fluent Design单选按钮,复选框,选择框,Java菜单
  6. stream+springmvc实现文件断点续传
  7. 有没有什么好的C++视频教程?
  8. 合并果子(信息学奥赛一本通-T1369)
  9. 统计数字字符和空格 (15 分)
  10. (四)怎么优化 where 子句
  11. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——E题 Seek the Joker II
  12. win10计算机安全策略设置,win10系统重置本地安全策略所有设置的操作方法
  13. Internet Download Manager IDM无反弹 切换中文教程
  14. 疫情时代无接触AI人脸识别技术助力智慧工地迅猛发展
  15. ubuntu 安装gnome3
  16. 分布式锁的一些细节问题,值得收藏
  17. 浅谈子网、子网掩码、保留地址
  18. Windows 11打印测试页
  19. 2020-07 前端技术汇总
  20. JAVA-----锁机制

热门文章

  1. iQOONeo6SE和iQOONeo5SE区别 哪个好 iQOONeo6SE和iQOONeo5SE哪个值得买 两者配置对比
  2. 大话 MySQL 数据库 -- 强推收藏!
  3. 大学计算机上机实验期末考试题,《大学计算机基础》上机实验报告
  4. 凯云水利水电工程造价系统 (三) 材料单价 (2)
  5. 产品周报第30期|编辑器支持自定义写作模板;MarkDown编辑器接入质量分检测功能;CSDN APP V5.2.0版本发布
  6. Excel中IF函数的使用
  7. Linux命令:lp
  8. 【重磅】2021年通信行业白皮书汇总下载(免费)
  9. Unity 编辑器开发实战【Custom Editor】- 为UI视图制作动画编辑器
  10. anyRTC2020年 年终总结