dp+记忆化搜索,dp[i][j]表示以i,j这个位置为起点能够划过的最大高度。
#include<stdio.h>
#include<string.h>
int dir_x[4]={1,-1,0,0};
int dir_y[4]={0,0,1,-1};
int map[110][110],dp[110][110];
int m,n,ans;
int max(int a,int b)
{
if(a>b) return a;
else return b;
}
int dfs(int i,int j)
{
if(dp[i][j]>0) return dp[i][j];
dp[i][j]=1;
for(int k=0;k<4;k++)
{
int x=i+dir_x[k];
int y=j+dir_y[k];
if(1<=x&&x<=m&&1<=y&&y<=n&&map[i][j]>map[x][y])
{
dp[i][j]=max(dp[i][j],1+dfs(x,y));
}
}
return dp[i][j];
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
ans=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&map[i][j]);
}
memset(dp,-1,sizeof(dp));
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
//memset(dp,-1,sizeof(dp));
int tot=dfs(i,j);
if(tot>ans) ans=tot;
}
printf("%d\n",ans);
}
return 0;
}
poj 1088 滑雪
最新推荐文章于 2020-01-21 13:23:11 发布