uva--10285Longest Run on a Snowboard+dp

来源:互联网 发布:淘宝客html模板 编辑:程序博客网 时间:2024/04/30 00:43

经典的滑雪问题,采用记忆化dp。

代码如下:


<span style="font-size:18px;">#include<iostream>#include<cstring>#include<cstdio>using namespace std;int m[110][110],d[110][110],r,c;int dx[]={1,-1,0,0},dy[]={0,0,1,-1};int dp(int i,int j){    if(d[i][j]>0)        return d[i][j];    d[i][j]=1;    for(int k=0;k<4;k++)    {        int xx=i+dx[k];        int yy=j+dy[k];        if(xx<1||xx>r||yy<1||yy>c)            continue;        int t=0;        if(m[i][j]<m[xx][yy])            t=dp(xx,yy)+1;        if(d[i][j]<t)            d[i][j]=t;    }    return d[i][j];}int main(){    int t;    scanf("%d",&t);    while(t--)    {        char name[100];        scanf("%s%d%d",name,&r,&c);        for(int i=1;i<=r;i++)            for(int j=1;j<=c;j++)                scanf("%d",&m[i][j]);        int ans=0;        for(int i=1;i<=r;i++)            for(int j=1;j<=c;j++)            {                memset(d,0,sizeof(d));                ans=max(dp(i,j),ans);            }        printf("%s: %d\n",name,ans);    }  return 0;}</span>




0 0
原创粉丝点击