QUYI @ 2023-03-07 13:15:43
#include<stdio.h>
int num[105][105];
int r,c;
int a[]={-1,0,0,1},b[]={0,-1,1,0};
int droad[105][105];
int road(int x,int y,int ans){
if(x<0||y<0||x>=r||y>=c){
return ans;
}
if(droad[x][y]!=-1){
return droad[x][y];
}
int max=0;
for(int i=0;i<4;i++){
int xx=x+a[i];
int yy=y+b[i];
if(xx<0||yy<0||xx>=r||yy>=c){
continue;
}
if(num[x][y]>num[xx][yy]){
droad[xx][yy]=road(xx,yy,1);
if(droad[xx][yy]>max){
max=droad[xx][yy];
}
}
}
ans+=max;
return ans;
}
int main() {
scanf("%d%d",&r,&c);
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
scanf("%d",&num[i][j]);
droad[i][j]=-1;
}
}
int max=0;
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
int temp=road(i,j,1);
if(temp>max){
max=temp;
}
}
}
printf("%d",max);
return 0;
}
by y_kx_b @ 2023-03-07 14:27:22
@QUYI
有没有一种可能,一个东西叫做查看题解()
dp 要考虑无后效性,所以对于这题而言,你可以按照拓扑序做,即从低到高,即这篇题解