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

poj 1088 滑雪

时间:2014-07-30 12:23:03      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:style   blog   os   io   for   2014   amp   size   

记忆化搜索。。

对每个点能走的最远进行记录,如果走过,直接返回上一层。。

最后遍历找出最大值。。

<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
  int q,w;
}s[104][105];
int a,b;
int yy[105][105];
int map[4][2]={1,0,-1,0,0,1,0,-1};
int dfs(int c,int d)
{
    if(s[c][d].w!=1)
    {
        return s[c][d].w;
    }
    int n,m,max=0;
    for(int i=0;i<4;i++)
    {
        int e=c+map[i][0];
        int f=d+map[i][1];
        if(e>0&&e<=a&&f<=b&&f>0&&s[c][d].q>s[e][f].q)
        {
            if(max<dfs(e,f))
                s[e][f].w=max=dfs(e,f);//这记录着每个点走的距离,但是没有对最终返回的值进行记录,少这个会超时
        }
    }
    return max+1;
}
int main()
{
    scanf("%d %d",&a,&b);
    for(int i=1;i<=a;i++)
    {
        for(int j=1;j<=b;j++)
        {
            scanf("%d",&s[i][j].q);
            s[i][j].w=1;
        }
    }
    int maxn;
    for(int i=1;i<=a;i++)
    {
        for(int j=1;j<=b;j++)
        {
           // memset(yy,0,sizeof(yy));
            if(s[i][j].w==1)
            {
                maxn=dfs(i,j);
                s[i][j].w=maxn;//记录最终返回的值
            }
        }
    }
    for(int i=1;i<=a;i++)
    {
        for(int j=1;j<=b;j++)
        {
           // printf("%d\n",s[i][j].w);
            if(s[i][j].w>maxn)
                maxn=s[i][j].w;
        }
    }
    printf("%d\n",maxn);
    return 0;
}
</span>


poj 1088 滑雪,布布扣,bubuko.com

poj 1088 滑雪

标签:style   blog   os   io   for   2014   amp   size   

原文地址:http://blog.csdn.net/asuxiexie/article/details/38294429

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