DP,90求助,测试点8WA
查看原帖
DP,90求助,测试点8WA
1121118
Nail9楼主2024/4/12 23:05

测试点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;
}
2024/4/12 23:05
加载中...