您的位置:首页 > 其它

[poj1088]滑雪(二维最长下降子序列)

2017-11-09 19:44 477 查看

解题关键:记忆化搜索

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int d[102][102],n,m;
int dp[102][102];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int dfs(int x,int y){
if(dp[x][y]) return dp[x][y];
int ans=0;
for(int i=0;i<4;i++){
int tx=x+dir[i][0],ty=y+dir[i][1];
if(tx<0||tx>=n||ty<0||ty>=m) continue;
if(d[tx][ty]<d[x][y]){
ans=max(ans,dfs(tx,ty));
}
}
return dp[x][y]=ans+1;
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&d[i][j]);
int ans=0;
for(int i=0;i<n;i++) for(int j=0;j<m;j++) ans=max(ans,dfs(i,j));
printf("%d\n",ans);
}
return 0;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: