经典动态规划 #include<stdio.h> int matrix[100][100],tab[100][100]; int main() { int r,c,i,j,a,b,n,min,max; scanf("%d%d",&r,&c); n = r*c; for(i = 0;i < r;i++) for(j = 0;j < c;j++) { scanf("%d",&matrix[i][j]); tab[i][j] = 0; } while(n--) { min = 20000; for(i = 0;i < r;i++) for(j = 0;j < c;j++) if(matrix[i][j]!=-1 && min > matrix[i][j]) { min = matrix[i][j]; a = i; b = j; } if(a!=0 && matrix[a][b]<matrix[a-1][b] && tab[a][b]+1 > tab[a-1][b]) tab[a-1][b] = tab[a][b]+1; if(b!=0 && matrix[a][b]<matrix[a][b-1] && tab[a][b]+1 > tab[a][b-1]) tab[a][b-1] = tab[a][b]+1; if(a!=(r-1) && matrix[a][b]<matrix[a+1][b] && tab[a][b]+1 > tab[a+1][b]) tab[a+1][b] = tab[a][b]+1; if(b!=(c-1) && matrix[a][b]<matrix[a][b+1] && tab[a][b]+1 > tab[a][b+1]) tab[a][b+1] = tab[a][b]+1; matrix[a][b]=-1; } max = -1; for(i = 0;i < r;i++) for(j = 0;j< c;j++) if(max < tab[i][j]) max = tab[i][j]; printf("%d/n",max+1); }