原题链接:https://www.luogu.com.cn/problem/P1736
算法标签:动态规划
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int map[2509][2509], dp[2509][2509][2];
int ans;
int main(){
int n, m;
cin >> n >> m;
for( int i=1; i<=n; i++ ){
for( int j=1; j<=m; j++ ){
cin >> map[i][j];
}
}
for( int i=1; i<=n; i++ ){
for( int j=1; j<=m; j++ ){
if( map[i][j] == 0 ){
dp[i][j][0] = 0;
dp[i][j][1] = 0;
}else{
int tmp = dp[i-1][j-1][0] + 1;
for( int k=1; k<=tmp; k++ ){
if(map[i][j-k] || map[i-k][j]){
tmp = k;
break;
}
}
dp[i][j][0] = tmp;
int tmp2 = dp[i-1][j+1][1] + 1;
for( int k=1; k<=tmp2; k++ ){
if(map[i][j+k] || map[i-k][j]){
tmp2 = k;
break;
}
}
dp[i][j][1] = tmp2;
}
ans = max(ans, max(dp[i][j][0], dp[i][j][1]));
}
}
cout << ans;
return 0;
}