转载请注明出处:http://blog.csdn.net/a1dark
最近一直在练DP。。。结果悲催的发现DP越来越不行了。。怎么也写不出来。。反倒是记忆化搜索越写越顺了。。真尼玛是个悲剧。。。。唉!
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=105;
int dp[maxn][maxn];
int mpt[maxn][maxn];
int dir[4][2]={0,1,1,0,-1,0,0,-1};
int n,m;
int dfs(int x,int y){
if(dp[x][y]>0)return dp[x][y];
for(int i=0;i<4;i++){
int tx=x+dir[i][0];
int ty=y+dir[i][1];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&mpt[x][y]>mpt[tx][ty]){
dp[x][y]=max(dp[x][y],1+dfs(tx,ty));
}
}
return dp[x][y];
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
int len=0;
memset(dp,0,sizeof(dp));
memset(mpt,0,sizeof(mpt));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&mpt[i][j]);
}
}
int maxx=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(dp[i][j]==0){
int ans=dfs(i,j);
if(ans>maxx)maxx=ans;
}
}
}
printf("%d\n",maxx+1);
}
return 0;
}