POJ1088-滑雪 记忆化DP
DP+DFS,记忆化搜索,典型的用空间换时间。
View Code
#include<stdio.h> #include<string.h> int dp[101][101],h[101][101]; int dir[4][2]={1,0,-1,0,0,1,0,-1}; int m,n; int dfs(int x,int y) { if(dp[x][y])return dp[x][y]; int i,temp; for(i=0;i<4;i++) { int fx=x+dir[i][0]; int fy=y+dir[i][1]; if(fx>=0&&fx<n&&fy>=0&&fy<m) { if(h[fx][fy]<h[x][y]) { temp=dfs(fx,fy); if(temp+1>dp[x][y])dp[x][y]=temp+1; } } } return dp[x][y]; } int main() { int i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) { for(j=0;j<m;j++) scanf("%d",&h[i][j]); } memset(dp,0,sizeof(dp)); int max=0; for(i=0;i<n;i++) for(j=0;j<m;j++) { dp[i][j]=dfs(i,j); if(max<dp[i][j])max=dp[i][j]; } printf("%d\n",max+1); } return 0; }


浙公网安备 33010602011771号