码迷,mamicode.com
首页 > 其他好文 > 详细

滑雪 (搜索)(dp)(贪心)

时间:2015-11-05 20:22:48      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

以每一点为起点找出所有路径,并求出以此点做为起点的最大路径

求出每个点的最大路径后再找出其中最大的值,输出最大值

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#define N 101
using namespace std;
int Hang ,Lie;
int dir[4][2]= {{-1,0},{0,-1},{1,0},{0,1}};//定义四个方向
int len[N][N],map1[N][N];
int dp(int i,int j)
{
if(len[i][j]!=0)return len[i][j];//当前坡度的长度
int s,max1=0;
for(int t=0; t<4; t++)
{
int sx=i+dir[t][0];
int sy=j+dir[t][1];
if(sx>=0&&sx<Hang&&sy>=0&&sy<Lie&&map1[sx][sy]<map1[i][j])//不越界并且小于当前的位置
{
s=dp(sx,sy);//计算以此位置开始的某一条路径的坡度
if(s>max1)max1=s;//找出最大的
}
}
len[i][j]=max1+1;
return max1+1;
}
int main()
{

while(~scanf("%d%d",&Hang,&Lie))
{
memset(len,0,sizeof(len));
for(int i=0; i<Hang; i++)
for(int j=0; j<Lie; j++)
scanf("%d",&map1[i][j]);
int max2=-1;
for(int i=0; i<Hang; i++)
for(int j=0; j<Lie; j++)
{
len[i][j]=dp(i,j);//计算以任意点为起点的最大长度
if(len[i][j]>max2)max2=len[i][j];//再找出最大长度
}
printf("%d\n",max2);
}

}

滑雪 (搜索)(dp)(贪心)

标签:

原文地址:http://www.cnblogs.com/aaaadengchaochao/p/4940489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!