2017.3.31 棋盘制作 失败总结

来源:互联网 发布:小黄鸭软件 编辑:程序博客网 时间:2024/06/04 19:56

        其实这种在平面里找子矩形有固定的套路:

         找出往左延伸的     再上下找、、

          但是还是跪了 毕竟弱、、


码:

#include<iostream>#include<cstdio>using namespace std;#define N 3000int zhan[N],up[N],top,n,m,i,j,f[N][N];int ans1,ans2;bool b[N][N];int main(){scanf("%d%d",&n,&m);for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%d",&b[i][j]);}for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(j==1||b[i][j-1]==b[i][j]^1)f[i][j]=f[i][j-1]+1;else f[i][j]=1;//cout<<f[i][j]<<" ";}//cout<<endl;}for(j=1;j<=m;j++){top=0;for(i=1;i<=n+1;i++){   up[i]=i;      while((b[i][j]==b[i-1][j]||f[i][j]<f[zhan[top]][j])&&top!=0){   // if(b[i][j]==b[i-1][j])cout<<"oo";if(i-up[zhan[top]]==f[zhan[top]][j]){   ans1=max(ans1,(i-up[zhan[top]])*f[zhan[top]][j]);    ans2=max(ans2,(i-up[zhan[top]])*f[zhan[top]][j]); }else  ans2=max(ans2,(i-up[zhan[top]])*f[zhan[top]][j]); if(b[i][j]!=b[i-1][j])up[i]=up[zhan[top]];--top;}                     zhan[++top]=i;}    }printf("%d\n%d",ans1,ans2);}


0 0
原创粉丝点击