随笔 - 6, 文章 - 5, 评论 - 0, 引用 - 0
数据加载中……

[VIJOS] P1011 滑雪

记忆化搜索

#include <stdio.h>

int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int a[501][501];
int f[501][501];
int v[501][501];
int r,c,fst;
long ans;

void
init()
{
     freopen("hx.in","r",stdin);
      scanf("%d%d",&r,&c);
      int i,j;
      for(i=1;i<=r;i++)
          for(j=1;j<=c;j++)
                      {
                           f[i][j]=1;
                           scanf("%d",&a[i][j]);
                      }
}

void
dfs(int x,int y)
{
        int i;
        
        for(i=0;i<=3;i++)
        {
        if( a[x+way[i][0]][y+way[i][1]] < a[x][y])
           {
                 if(!v[x+way[i][0]][y+way[i][1]])
                
                    {
                                  v[x+way[i][0]][y+way[i][1]]=1;
                                  dfs(x+way[i][0],y+way[i][1]);
                    }
                 if(f[x+way[i][0]][y+way[i][1]] + 1 > f[x][y])
                {
                                           f[x][y] = f[x+way[i][0]][y+way[i][1]] + 1;
                                           fst=1;
                                           if(ans < f[x][y])
                                               ans = f[x][y];
                }
           }
        }
}
            
                              
                                                         


void
doit()
{
      int i,j;
      
      for(i=1;i<=r;i++)
          for(j=1;j<=c;j++)
              dfs(i,j);
}
     
int
main()
{
      freopen("hx.out","w",stdout);
      init();
      doit();
      fst ? printf("%ld\n",ans) : printf("1\n");
      return 0;
}
 PS:开数组要开大些。。。     

posted on 2012-10-23 20:22 slytherin 阅读(84) 评论(0)  编辑 收藏 引用 所属分类: VIJOS


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理