1 条题解
-
0
C++ :
#include <cstdio> #include <algorithm> using namespace std; int n,m; static int a[1005][1005]; int main(){ if(scanf("%d %d",&n,&m)!=2) return 0; for(int i=0;i<n;i++)for(int j=0;j<m;j++)scanf("%d",&a[i][j]); int ans=0; // 方向:右(0,1) 下(1,0) 右下(1,1) 左下(1,-1);每对相邻羊连边,求最长链 int dr[4]={0,1,1,1}, dc[4]={1,0,1,-1}; static int f[1005][1005][4]; // 因为边方向单调(行递增),可按行从后往前递推,每条直线最长连续段 int best=0; for(int i=n-1;i>=0;i--)for(int j=0;j<m;j++){ if(!a[i][j]) continue; for(int d=0;d<4;d++){ int pi=i-dr[d], pj=j-dc[d]; int v=1; if(pi>=0&&pi<n&&pj>=0&&pj<m&&a[pi][pj]) v=f[pi][pj][d]+1; f[i][j][d]=v; if(v>best)best=v; } } ans = best>=2?best:0; printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 2701
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者