POJ-1088-滑雪
2016-09-20 21:47
381 查看
思路:
mp记录长度,a记录这个单位高度,vis记录是否遍历过
#include <iostream>
#include <stdio.h>
using namespace std;
int col,row;
int mp[105][105];
int a[105][105];
int vis[105][105];
int solve(int x,int y)
{
if(x<1||x>row||y<1||y>col)
return 0;
if(vis[x][y]==1)
return mp[x][y];
vis[x][y]=1;
int up=0,down=0,left=0,right=0;
if(a[x][y]>a[x-1][y])
up=solve(x-1,y);
if(a[x][y]>a[x+1][y])
down=solve(x+1,y);
if(a[x][y]>a[x][y-1])
left=solve(x,y-1);
if(a[x][y]>a[x][y+1])
right=solve(x,y+1);
mp[x][y]=+mp[x][y]+max(max(max(up,down),left),right);
return mp[x][y];
}
int main()
{
cin>>row>>col;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
cin>>a[i][j];
mp[i][j]=1;
vis[i][j]=0;
}
}
int maxn=0;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
maxn=max(maxn,solve(i,j));
}
}
cout<<maxn<<endl;
return 0;
}
mp记录长度,a记录这个单位高度,vis记录是否遍历过
#include <iostream>
#include <stdio.h>
using namespace std;
int col,row;
int mp[105][105];
int a[105][105];
int vis[105][105];
int solve(int x,int y)
{
if(x<1||x>row||y<1||y>col)
return 0;
if(vis[x][y]==1)
return mp[x][y];
vis[x][y]=1;
int up=0,down=0,left=0,right=0;
if(a[x][y]>a[x-1][y])
up=solve(x-1,y);
if(a[x][y]>a[x+1][y])
down=solve(x+1,y);
if(a[x][y]>a[x][y-1])
left=solve(x,y-1);
if(a[x][y]>a[x][y+1])
right=solve(x,y+1);
mp[x][y]=+mp[x][y]+max(max(max(up,down),left),right);
return mp[x][y];
}
int main()
{
cin>>row>>col;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
cin>>a[i][j];
mp[i][j]=1;
vis[i][j]=0;
}
}
int maxn=0;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
maxn=max(maxn,solve(i,j));
}
}
cout<<maxn<<endl;
return 0;
}
相关文章推荐
- POJ 题目1088 滑雪(记忆搜索)
- poj 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪(记忆化搜索)
- Poj 1088 滑雪 (简单DP + 记忆化搜索)
- POJ1088 滑雪(记忆化搜索)
- poj 1088 滑雪问题
- poj1088 滑雪(dfs、dp优化)
- POJ 1088 滑雪
- Poj 1088 滑雪
- poj 1088 滑雪
- poj 1088 滑雪(记忆化搜索)
- poj1088滑雪【记忆化搜索 初级题】
- poj 1088滑雪【DP】
- poj 1088滑雪------精简的dfs代码
- poj 1088-滑雪;NYOJ 10-skiing
- POJ 1088 滑雪
- [POJ] 1088 -> 滑雪
- POJ 百练 1088:滑雪
- POJ - 1088 滑雪 DP+记忆化搜索