ㄎㄎ 這和 最大子矩陣 一樣處理方法XD
#include<stdio.h> #include<stdlib.h> int main() { int met[202][202]; int prc[202][202]; int n,m; int T,lT;scanf("%d",&T); for(lT=1;lT<=T;lT++) { scanf("%d %d",&n,&m); for(int lx=0;lx<=200;lx++) { met[lx][0]=0; met[0][lx]=0; } for(int lx=1;lx<=n;lx++) { for(int ly=1;ly<=m;ly++) { int inp; scanf("%d",&inp); met[lx][ly]=(inp==0)? 1:-1; } } for(int lx=1;lx<=n;lx++) for(int ly=1;ly<=m;ly++) prc[lx][ly]=prc[lx-1][ly]+prc[lx][ly-1]-prc[lx-1][ly-1]+met[lx][ly]; int max=0; for(int cx1=1;cx1<=n;cx1++) for(int cx2=cx1;cx2<=n;cx2++) for(int cy1=1;cy1<=m;cy1++) for(int cy2=cy1;cy2<=m;cy2++) if((0<prc[cx2][cy2]-prc[cx2][cy1-1]-prc[cx1-1][cy2]+prc[cx1-1][cy1-1])&&(max<=(cx2-cx1+1)*(cy2-cy1+1))) max=(cx2-cx1+1)*(cy2-cy1+1); printf("%d\n",max); } return 0; }
沒有留言:
張貼留言