有一个经典的dp题,当然为了提高效率还使用了记忆性搜索。是一道很难得的好题.
#include<iostream>
const int MAX=101;
int r,c;
int h[MAX][MAX];
int f[MAX][MAX];
int LP(int i,int j){
int max=0,k,a[4];
if(f[i][j]!=-1)
return f[i][j];
else if(i<0||j<0||i>=r||j>=c)
return 0;
else{
if((i-1)<0||h[i-1][j]>=h[i][j])
a[0]=0;
else
a[0]=LP(i-1,j);
if((i+1)>=r||h[i+1][j]>=h[i][j])
a[1]=0;
else
a[1]=LP(i+1,j);
if((j+1)>=c||h[i][j+1]>=h[i][j])
a[2]=0;
else
a[2]=LP(i,j+1);
if((j-1)<0||h[i][j-1]>=h[i][j])
a[3]=0;
else
a[3]=LP(i,j-1);
for(k=0;k<4;k++){
if(a[k]>max)
max=a[k];
}
f[i][j]=max+1;
return max+1;
}
}
int main(){
int i,j,max,t;
while(scanf("%d%d",&r,&c)!=-1){
for(i=0;i<r;i++){
for(j=0;j<c;j++){
scanf("%d",&h[i][j]);
f[i][j]=-1;
}
}
max=0;
for(i=0;i<r;i++){
for(j=0;j<c;j++){
t=LP(i,j);
if(t>max)
max=t;
}
}
printf("%d"n",max);
}
}
转载于:https://www.cnblogs.com/saintqdd/archive/2007/09/01/877888.html