经典的动态规划问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int length[105][105];
int height[105][105];
struct heap{
int r,c,height;
};
int shift[4][2]={
{0,1},
{0,-1},
{1,0},
{-1,0}
};
heap heaps[105*105];
int cmp(const void * a,const void * b){
heap h1=*((heap *)a);
heap h2=*((heap *)b);
return h1.height-h2.height;
}
int main(){
int r,c;
scanf("%d%d",&r,&c);
memset(length,0,105*105);
memset(height,0,105*105);
int index=0;
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
int h;
scanf("%d",&h);
heaps[index].r=i;
heaps[index].c=j;
heaps[index++].height=h;
height[i][j]=h;
}
}
qsort(heaps,r*c,sizeof(struct heap),cmp);
for(index=0;index<r*c;index++){
heap temp=heaps[index];
int row=temp.r;
int col=temp.c;
int i=0;
for(;i<4;i++){
int tr=row+shift[i][0];
int tc=col+shift[i][1];
if(height[tr][tc]>height[row][col]){
if(length[tr][tc]-1<length[row][col]){
length[tr][tc]=length[row][col]+1;
}
}//if
}//for
}//for
int max=0;
for(int j1=0;j1<r;j1++){
for(int i1=0;i1<c;i1++){
if(length[j1][i1]>max){
max=length[j1][i1];
}
}
}
printf("%d\n",max+1);
return 0;
}