POJ1088

来源:互联网 发布:软件融合器 编辑:程序博客网 时间:2024/06/04 08:57

记忆化搜索+DP


一直X到最低点的最长路径,切Y>X,则Y到最低点的最短路径就是Y->X+X到最低点的距离


#include <iostream>

#include <stdio.h>
#include <string.h>


using namespace std;


#define maxn 200 + 5
int map[maxn][maxn];
int dp[maxn][maxn];


int x[4] = {1,-1,0,0};
int y[4] = {0,0,1,-1};


int R,C;


int dfs( int r, int c)
{


    int len = 1;


    if(dp[r][c] > 1)
       return dp[r][c];


    for( int i = 0; i < 4; i++)
    {
       int row = r + x[i];
       int col = c + y[i];


     if( row >= 1 && row <= R && col >= 1 && col <= C && map[r][c] > map[row][col])
      {
           dp[r][c] = dfs(row,col) + 1;
       回溯;
        if( len < dp[r][c])
          len = dp[r][c];
      }
    }
    dp[r][c] = len;
   return len;


}


int main()
{
    int i,j;
    int ans;
    scanf("%d %d", &R, &C);
        ans = 1;
        for( i = 1; i<= R ; i++)
         for(  j = 1; j<= C; j++)
           {
               scanf("%d",&map[i][j]);
               dp[i][j] = 1;
           }




        for( i = 1; i<=R; i++)
         for( j = 1; j<=C; j++)
         {
             dp[i][j] = dfs(i,j);


             if(dp[i][j] > ans)
               ans = dp[i][j];
         }


        printf("%d\n",ans);
}
0 0
原创粉丝点击