典型的DP问题。要仔细研究DP。 #include<iostream> using namespace std; //DP题,从此在DP上要努力,要多做DP题 int num[102][102]; int length[102][102]; int r,c; int getLength(int i,int j) { if(length[i][j]>0) { return length[i][j]; } int max=0; if((i!=0)&&(num[i][j]>num[i-1][j])) { int x=getLength(i-1,j)+1; if(max<x) { max=x; } } if((i!=r-1)&&(num[i][j]>num[i+1][j])) { int x=getLength(i+1,j)+1; if(max<x) { max=x; } } if((j!=0)&&(num[i][j]>num[i][j-1])) { int x=getLength(i,j-1)+1; if(max<x) { max=x; } } if((j!=c-1)&&(num[i][j]>num[i][j+1])) { int x=getLength(i,j+1)+1; if(max<x) { max=x; } } return max; } int main() { cin>>r>>c; int i,j; for(i=0;i<r;i++) { for(j=0;j<c;j++) { cin>>num[i][j]; length[i][j]=0; } } int maxLen=0; for(i=0;i<r;i++) { for(j=0;j<c;j++) { length[i][j]=getLength(i,j); if(maxLen<length[i][j]) { maxLen=length[i][j]; } } } cout<<maxLen+1<<endl; system("pause"); return 0; }