P1387 dp入门
来源:互联网 发布:网络密匙 编辑:程序博客网 时间:2024/05/23 12:39
原题链接:https://www.luogu.org/problemnew/show/P1387
用两个数组进行预处理le[i][j]表示从i,j向左延伸最大的边长up[i][j]表示向上延伸的最大边长然后枚举每一个点再枚举(i,j)到(i-temp,j)temp为当前枚举到的最短边长。复杂度为O(n^3)
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int maxn=200;int n,m;int a[maxn][maxn]={},up[maxn][maxn]={},le[maxn][maxn]={};int main(){ memset(a,0,sizeof(a)); while(scanf("%d%d",&n,&m)==2){ memset(le,0,sizeof(le)); memset(up,0,sizeof(up)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ scanf("%d",&a[i][j]); if(a[i][j]){ le[i][j]=le[i][j-1]+1; up[i][j]=up[i-1][j]+1; } } int ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)if(a[i][j]){ int temp=up[i][j]; for(int k=i;k>i-temp;k--) temp=min(le[k][j],temp); ans=max(ans,temp); } printf("%d\n",ans); } return 0;}
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int maxn=200;int n,m;int dp[maxn][maxn]={};int main(){ while(scanf("%d%d",&n,&m)==2){ memset(dp,0,sizeof(dp)); int ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ int a; scanf("%d",&a); if(!a) continue; dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1; ans=max(ans,dp[i][j]); } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- P1387 dp入门
- 洛谷 P1387 最大正方形
- 洛谷 p1387 最大正方形
- 洛谷 P1387 最大正方形
- 洛谷 P1387 最大正方形
- luogu P1387 最大正方形
- [P1387]最大正方形
- P1387 最大正方形
- 洛谷p1387最大正方形
- 洛谷 P1387 最大正方形
- 洛谷 [P1387]最大正方形
- DP入门
- DP入门
- DP入门
- dp入门
- DP入门
- DP入门
- DP入门
- Day016
- jQuery中的load
- spring mvc 5.0 模型视图详解 07
- 09-mysql多表查询
- linux 命令(一)
- P1387 dp入门
- TabLayout+ViewPager实现tab和页面联动效果
- ElasticSearch-5.0安装head插件
- 自定义控件之AddItemView
- Day017
- 一行命令搞定node.js 版本安装、升级与卸载
- VMWare中创建用户,并与SecureCRT进行远程连接
- 设计一个有getMin功能的栈
- Java中抽象类与接口区别