ACM PUK 1088 滑雪 http://acm.pku.edu.cn/JudgeOnline/problem?id=1088

人家都说这是一道动态规划题,而我认为这不过是一道广搜题,递归就完全可以解决,而且还不需要用队列,代码很简单也很容易懂,说太多没用,大家都知道,我的代码:
#include <iostream>
using namespace std;

int slope[100][100];

int changdu[100][100];

int R , C ;

int fuc (int i,int j)
{
int max = 0 ;

if ( changdu[i][j] > 0 ) return changdu[i][j];

if ( i-1>=0)
{
if ( slope[i-1][j] > slope[i][j] )
{
   if ( max < fuc(i-1 , j))
    max = fuc(i-1,j);
}
}

if ( i+1 < R)
{
if ( slope[i+1][j] > slope[i][j] )
{
          if ( max < fuc(i+1 , j))
    max = fuc(i+1,j);
}
}

if ( j-1>=0)
{
if ( slope[i][j-1] > slope[i][j] )
{
   if ( max < fuc(i , j-1))
    max = fuc(i ,j-1);
}
}

if ( j+1 < R)
{
if ( slope[i][j+1] > slope[i][j] )
{
          if ( max < fuc(i , j+1))
    max = fuc(i,j+1);
}
}
return changdu[i][j] = max+1;
}


int main ()
{

memset(slope, 0, sizeof(int));

cin >>R>>C;

for (int i=0; i<R; i++)
for (int j=0; j<C; j++)
{
   cin >> slope[i][j];
       changdu[0][0];
}
for (int a=0; a<R; a++)
   for (int b=0; b<C; b++)
   {
      fuc(a,b);
   }
int temp=0;
for (int A=0; A<R; A++)
   for (int B=0; B<C; B++)
   {
   if (temp<changdu[A][B])
       temp=changdu[A][B];
   }
   
cout<<temp<<endl;

return 0;
}

posted on 2011-05-06 19:09  _Clarence  阅读(134)  评论(0编辑  收藏  举报

导航