心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

记忆化搜索。d[i][j]=max(d[i'][j']);a[i][j]<a[i'][j']

以下是我的代码。

#include<stdio.h>
long r,c,ans,a[508][508],d[508][508];
long xd[]={-1,0,1,0},yd[]={0,1,0,-1};
long max(long a,long b)
{
    
return (a>b?a:b);
}

void init()
{
    
long i,j;
    scanf(
"%ld%ld",&r,&c);
    
for(i=1;i<=r;i++)
      
for(j=1;j<=c;j++)
        scanf(
"%ld",&a[i][j]);
    
for(i=0;i<=r;i++)
      
for(j=0;j<=c;j++)
        d[i][j]
=-1;
    ans
=0;
}

long dp(long x,long y)
{
    
long k,t1,t2;
    
if(d[x][y]!=-1return d[x][y];
    d[x][y]
=1;
    
for(k=0;k<4;k++)
    
{
       t1
=x+xd[k];
       t2
=y+yd[k];
       
if(t1>=1&&t1<=r&&t2>=1&&t2<=c&&a[t1][t2]<a[x][y])
         d[x][y]
=max(d[x][y],dp(t1,t2)+1);
    }

    ans
=max(ans,d[x][y]);
    
return d[x][y];
}

int main()
{
    
long i,j;
    init();
    
for(i=1;i<=r;i++)
      
for(j=1;j<=c;j++)
        dp(i,j);
    printf(
"%ld\n",ans);
// getchar();getchar();
return 0;
}

posted on 2010-01-06 20:26 lee1r 阅读(267) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:动态规划

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