您的位置:首页 > 其它

pku_acm_1088

2011-01-06 15:30 225 查看
//这一题 一开始以为必须从最高点开始,结果用动态规划,被WA了(看来今后还得注意看题阿),后来用带搜索记忆的递归去解决,AC了

#include<stdio.h>

int C, R, a[100][100], cnt[100][100];

int f(int h, int i, int j)

{

 int m = 0;

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

 if(a[i-1][j]<h && i-1>=0)

  if(f(a[i-1][j], i-1, j)>m)

   m = f(a[i-1][j], i-1, j);

 if(a[i][j+1]<h && j+1<R)

  if(f(a[i][j+1], i, j+1)>m)

   m = f(a[i][j+1], i, j+1);

 if(a[i+1][j]<h && i+1<C)

  if(f(a[i+1][j], i+1, j)>m)

   m = f(a[i+1][j], i+1, j);

 if(a[i][j-1]<h && j-1>=0)

  if(f(a[i][j-1], i, j-1)>m)

   m = f(a[i][j-1], i, j-1);

 return cnt[i][j] = m + 1;

}

int main()

{

 int i, j, max = -999999;

 scanf("%d%d", &C, &R);

 for(i=0; i<C; i++)

  for(j=0; j<R; j++)

  {

   scanf("%d", &a[i][j]);

   cnt[i][j] = 0;

  }

 for(i=0; i<C; i++)

 {

  for(j=0; j<R; j++)

  {

   f(a[i][j], i, j);

  }

 }

 for(i=0; i<C; i++)

 {

  for(j=0; j<R; j++)

  {

   if(cnt[i][j] > max)

   {

    max = cnt[i][j];

   // x = i;

   // y = j;

   }

  }

 }

 printf("%d/n", max);

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c