luogu P1736 创意吃鱼法
2024-09-04 07:12:23
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include<map>
typedef long long ll;
using namespace std;
int n,m,ans;
int a[][],f[][],s1[][],s2[][];//s1为横向,s2为纵向 //s1[i][j]表示(i,j)最多向左(右)延伸多少个格子,使这些格子中的数都是0(不包括(i,j))
//s2[i][j]表示(i,j)最多向上(左)延伸多少个格子,使这些格子中的数都是0(不包括(i,j))
//f[i][j]表以(i,j)为右下(左下)角的最大对角线长度
int main()
{
cin>>n>>m;
//第一遍左上——右下
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
scanf("%d",&a[i][j]);
//如果是0
if(!a[i][j])
{
//向左
s1[i][j]=s1[i][j-]+;
//向上
s2[i][j]=s2[i-][j]+;
}
//如果是1
if(a[i][j])
// f[i-1][j-1]和 (s1[i][j-1],s2[i-1][j])同时取小
//为了防止有1出现
f[i][j]=min(f[i-][j-],min(s1[i][j-],s2[i-][j]))+;
ans=max(ans,f[i][j]);
}
//第二遍右上——左下
memset(f,,sizeof(f));
memset(s1,,sizeof(s1));//数组置0
memset(s2,,sizeof(s2));
for(int i=; i<=n; i++)
for(int j=m; j>=; j--)
{
if(!a[i][j])
{
s1[i][j]=s1[i][j+]+;
s2[i][j]=s2[i-][j]+;
}
if(a[i][j])
f[i][j]=min(f[i-][j+],min(s1[i][j+],s2[i-][j]))+;
ans=max(ans,f[i][j]);
}
cout<<ans<<endl;
return ;
}
最新文章
- C#遐想/瞎想
- C# Questions
- [New Portal]Windows Azure Virtual Machine (16) 使用Azure PowerShell创建Azure Virtual Machine
- CI框架源码阅读笔记9 CI的自动加载机制autoload
- proxy改变this指向
- 斑点检测(LoG,DoG)(下)
- 001_JavaScript 错误 - Throw、Try 和 Catch
- 浏览器js console对象
- kinect学习笔记(三)&mdash;&mdash;深度数据的提取
- HTML语言的一些元素(三)
- 关于json 的那些知识点
- 自动登录 登陆成功那个alert遮盖一直存在bug
- SQL开发技巧(二) 【转】感觉他写的很好
- Linux下关于解决JavaSwing中文乱码的情况(转)
- QTP11完美破解小笔记
- Windows Server 2016-查询FSMO角色信息的三种方法
- PyTorch官方中文文档:torch
- 转---JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制
- Django项目的创建和设计模式
- php的GC机制