测试点8错误,评测链接
测试点8输入数据:link,输出答案为45,我的答案为39。
类似DP的方式做的:
#include <bits/stdc++.h>
using namespace std;
const int MAX=1000;
//const int MAX=102;
int datum[MAX][MAX];
int DP[MAX][MAX];
//DP
int main(){
int nhang,mlie;
scanf("%d %d",&nhang,&mlie);
for(int ihang=1;ihang<=nhang;ihang++)
for(int ilie=1;ilie<=mlie;ilie++){
scanf("%d",&datum[ihang][ilie]);
}
int res=0;
for(int ihang=1;ihang<=nhang;ihang++)
for(int ilie=1;ilie<=mlie;ilie++){
if(!datum[ihang][ilie])
continue;
int bef=DP[ihang-1][ilie-1];
if(bef==0){
DP[ihang][ilie]=1;
res=max(res,DP[ihang][ilie]);
continue;
}
bool ifok=true;
for(int i=1;i<=bef;i++)
if(!datum[ihang-i][ilie]){
ifok=false;
break;
}
if(ifok)
for(int i=1;i<=bef;i++)
if(!datum[ihang][ilie-i]){
ifok=false;
break;
}
if(ifok)
DP[ihang][ilie]=DP[ihang-1][ilie-1]+1;
else
DP[ihang][ilie]=1;
res=max(res,DP[ihang][ilie]);
}
printf("%d",res);
return 0;
}