poj 1088 滑雪 动态规划

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

struct node
{
    int x,y;
    int h;
}b[510*510];

int cmp(node n1,node n2)
{
    return n1.h<n2.h;
}

int main()
{

    int x,y,ans,cnt,i,j,r,c,t,d[510][510],a[510][510];
    while(~scanf("%d%d",&r,&c))
    {
        cnt=0;
        memset(a,0,sizeof(a));
        for(i=1;i<=r;i++)
            for(j=1;j<=c;j++)
            {
                scanf("%d",&t);
                b[cnt].x=i;
                b[cnt].y=j;
                b[cnt].h=t;
                cnt++;
                a[i][j]=t;
                d[i][j]=1;
            }
        sort(b,b+cnt,cmp);
        for(i=0;i<cnt;i++)
        {
            x=b[i].x;
            y=b[i].y;
            if(a[x][y]<a[x-1][y]) d[x-1][y]=max(d[x-1][y],d[x][y]+1);
            if(a[x][y]<a[x+1][y]) d[x+1][y]=max(d[x+1][y],d[x][y]+1);

            if(a[x][y]<a[x][y-1]) d[x][y-1]=max(d[x][y-1],d[x][y]+1);
            if(a[x][y]<a[x][y+1]) d[x][y+1]=max(d[x][y+1],d[x][y]+1);
        }
        ans=0;
        for(i=1;i<=r;i++)
            for(j=1;j<=c;j++)
                ans=max(ans,d[i][j]);
        printf("%d\n",ans);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

posted @ 2015-09-25 13:51  xryz  阅读(99)  评论(0编辑  收藏  举报