您的位置:首页 > 其它

poj 1088 滑雪 动态规划

2016-11-14 19:56 232 查看
题意:给定一个图,每个点有一个高度值,某人在这个区域滑雪,只能从高处向低处,要求出他滑雪的最大路径,先输入行数和列数,随后是一个矩阵

#include<iostream>
using namespace std;
int map[101][101],dp[101][101];
int R,C;
int Max(int a,int b,int c,int d)
{
int a1 = a>b?a:b;
int a2 = c>d?c:d;
return a1>a2?a1:a2;
}
int Maxlen(int x,int y)//寻找坐标为x,y的最大路径
{
if(dp[x][y]>0)
return dp[x][y];//在这儿声明了重复的变量,导致一直错
int a=0;
int b=0;
int c=0;
int d=0;
if(x-1>=0 && map[x][y]>map[x-1][y])
{
a = Maxlen(x-1,y);
}
if(x+1<R && map[x][y]>map[x+1][y])
{
b = Maxlen(x+1,y);
}
if(y-1>=0 && map[x][y]>map[x][y-1])
{
c = Maxlen(x,y-1);
}
if(y+1<C && map[x][y]>map[x][y+1])
{
d = Maxlen(x,y+1);
}
return dp[x][y] = Max(a,b,c,d)+1;
}
int main()
{
cin>>R>>C;

for(int i=0;i<R;i++)
for(int j=0;j<C;j++)
{
cin>>map[i][j];
dp[i][j] = 0;
}

for(int i=0;i<R;i++)
for(int j=0;j<C;j++)
{
Maxlen(i,j);
}

int max=0;

for(int i=0;i<R;i++)
for(int j=0;j<C;j++)
if(max<dp[i][j])max=dp[i][j];

cout<<max<<endl;
}
注意变量作用域,可把我坑惨了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: