[luoguP1736] 创意吃鱼法(DP)
f[i][j][0] 表示从右下角到左上角,以(i,j)为起点能延伸的最大值
f[i][j][1] 表示从左下角到右上角,以(i,j)为起点能延伸的最大值
up[i][j] 表示(i,j)上面有多少个0
left[i][j] 表示(i,j)左边有多少个0
right[i][j] 表示(i,j)右边有多少个0
f[i][j][0] = min(f[i - 1][j - 1][0], up[i][j], left[i][j]) + 1
f[i][j][1] = min(f[i - 1][j + 1][1], up[i][j], right[i][j]) + 1
代码
#include <cstdio>
#include <iostream>
#define N 2510
#define max(x, y) ((x) > (y) ? (x) : (y))
#define min(x, y) ((x) < (y) ? (x) : (y)) int n, m, ans;
unsigned short up[N][N], left[N][N], right[N][N], f[N][N][2];
bool a[N][N]; inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} int main()
{
int i, j;
n = read();
m = read();
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
{
f[i][j][0] = f[i][j][1] = a[i][j] = read();
up[i][j] = a[i - 1][j] ? 0 : up[i - 1][j] + 1;
left[i][j] = a[i][j - 1] ? 0 : left[i][j - 1] + 1;
}
for(i = 1; i <= n; i++)
for(j = m; j >= 1; j--)
right[i][j] = a[i][j + 1] ? 0 : right[i][j + 1] + 1;
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
{
if(!a[i][j]) continue;
f[i][j][0] = min(f[i - 1][j - 1][0], min(up[i][j], left[i][j])) + 1;
f[i][j][1] = min(f[i - 1][j + 1][1], min(up[i][j], right[i][j])) + 1;
ans = max(ans, max(f[i][j][0], f[i][j][1]));
}
printf("%d\n", ans);
return 0;
}
[luoguP1736] 创意吃鱼法(DP)的更多相关文章
- 洛谷P1736 创意吃鱼法 dp
正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...
- P1736 创意吃鱼法 /// DP
题目大意: https://www.luogu.org/problemnew/show/P1736 题解 dplr[][] 当前点左边(副对角线时为右边)有多少个连续的0 dpup[][] 当前点上边 ...
- P1387 最大正方形&&P1736 创意吃鱼法
P1387 最大正方形 P1736 创意吃鱼法 两道类似的$DP$ 转移方程基本上类似于$f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))$ 考虑构成 ...
- 洛谷 P1736 创意吃鱼法 Label:dp || 前缀和
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- P1736 创意吃鱼法 图的DP
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- P1736 创意吃鱼法[二维dp]
题目背景 感谢@throusea 贡献的两组数据 题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她 ...
- P1387 最大正方形 && P1736 创意吃鱼法(DP)
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- 洛谷 P1736 创意吃鱼法(多维DP)
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- P1736 创意吃鱼法
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
随机推荐
- 微信H5页面 - 调酒
这是微信H5的一款小游戏(一款酒的推广活动),主要游戏页面如下: 游戏规则: 点击选择2个元素(圈圈图片),放入瓶中,使它们与瓶中已有的三个元素碰撞,调配佳酿. 只有选择正确的2个元素搭配,才可以调配 ...
- 列表框、分组列表框、标签(label)、分组框(fieldset)、框架(frameset)
列表框(select) 下拉列表,用户可以从一些可选项中选择. 示例:简单的下拉列表 <select name="country"> <option value= ...
- elasticsearch 查询优化
首先对不必要的字段不做分词也就是不做索引,禁止内存交换 1.shard 一个Shard就是一个Lucene实例,是一个完整的搜索引擎. 分片数过多会导致检索时打开比较多的文件,多台服务器之间通讯成本加 ...
- Android Could not find com.afollestad:material-dialogs:0.7.6.0 解决
AS报错:Could not find com.afollestad:material-dialogs:0.7.6.0 网上没有解决方案: 解决: 将用: compile('com.afollesta ...
- 通过机智云APP来学习安卓
效果非常之好,安卓6.0之后就进行了动态授权.按照网上的视频一步一步调试的非常成功,非常舒服.
- Fiddler——抓包工具的使用
fiddler安装 pc端安装fiddler,自行从百度下载即可 Fiddler是强大且好用的Web调试工具之一,它能记录客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输 ...
- java 基础学习笔记 - 安装
1. 从www.sun.com中 下载jdk安装包 2. 执行安装包,安装jdk ,jre(Java运行环境) 3. 配置path路径 增加jdk下的bin目录. 配置完后需要重启cmd窗口,因为cm ...
- Python 开发初识
从今天开始记录自己的python开发之路,用博客记录自己的学习经历,以及学习小结,小的项目模块,努力充实,做最好的自己!!!
- iOS布局进化史
一.绝对布局.layoutsubviews. 二.父视图相对布局 注意:Autoresizing只能设置父子视图之间的关系,也就是说,Autoresizing只能控制子视图和父视图之间的位置/大小关系 ...
- CAD得到布局名
js代码如下: var database = mxOcx.GetDatabase(); var sRet = null; //返回数据库中的布局字典 var spLayoutDictionary = ...