2 条题解
-
0
模拟即可
#include<bits/stdc++.h> using namespace std; int m,n,a[1001][1001],b[1001][1001],l; int search(int x,int y){ if(b[x][y])return b[x][y]; b[x][y]=1; if(a[x][y]>a[x][y+1]&&a[x][y+1])b[x][y]=max(b[x][y],1+search(x,y+1)); if(a[x][y]>a[x][y-1]&&a[x][y-1])b[x][y]=max(b[x][y],1+search(x,y-1)); if(a[x][y]>a[x+1][y]&&a[x+1][y])b[x][y]=max(b[x][y],1+search(x+1,y)); if(a[x][y]>a[x-1][y]&&a[x-1][y])b[x][y]=max(b[x][y],1+search(x-1,y)); return b[x][y]; } int main(){ cin>>m>>n; for(int i=1;i<=m;i++) for(int o=1;o<=n;o++)cin>>a[i][o]; for(int i=1;i<=m;i++) for(int o=1;o<=n;o++)search(i,o); for(int i=1;i<=m;i++) for(int o=1;o<=n;o++)l=max(l,b[i][o]); cout<<l; return 0; }
-
0
#include<cstdio> #include<cstring> using namespace std; int f[105][105]; int a[105][105]; int r,c; int longest(int x,int y); int maxlong=-1000; int main() { scanf("%d%d",&r,&c); for (int i=1;i<=r;i++) { for (int j=1;j<=c;j++) { scanf("%d",&a[i][j]); } } memset(f,-1,sizeof(f)); for (int i=1;i<=r;i++) { for (int j=1;j<=c;j++) { int tmp=longest(i,j); maxlong=maxlong>tmp?maxlong:tmp; } } printf("%d",maxlong); return 0; } int longest(int x,int y) { if (f[x][y]<0) { int maxlen=0; if (x>1 && a[x][y]>a[x-1][y]) { int clen=longest(x-1,y); if (maxlen<clen) maxlen=clen; } if (y>1 && a[x][y]>a[x][y-1]) { int clen=longest(x,y-1); if (maxlen<clen) maxlen=clen; } if (x<c && a[x][y]>a[x+1][y]) { int clen=longest(x+1,y); if (maxlen<clen) maxlen=clen; } if (y<r && a[x][y]>a[x][y+1]) { int clen=longest(x,y+1); if (maxlen<clen) maxlen=clen; } f[x][y]=maxlen+1; } return f[x][y]; }
- 1
信息
- ID
- 1349
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 56
- 已通过
- 23
- 上传者