poj 1088 滑雪

来源:互联网 发布:数据港千股千评 编辑:程序博客网 时间:2024/05/23 01:20

滑雪
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 75626 Accepted: 28028

难得一见的中文题  题意就不多做解释  求最长路径

简单点的动规  唯一的麻烦就是没告诉你起点和终点  没关系  直接一个个暴搜反正数据不大。。。

转移方程 dp[ i ] [ j ]=max( dp[ i-1 ] [ j ] ,dp[ i ] [ j-1 ] ,dp[ i+1 ] [ j ] ,dp  [ i ] [ j+1 ]  )


#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};int dp[105][105];int map[105][105],vis[105][105];int col,row,ans;int search(int x,int y){    int sum,xx,yy,maxn=0;    if(dp[x][y])        return dp[x][y];    for(int i=0;i<4;i++)    {        xx=x+dx[i];        yy=y+dy[i];        if(xx>=0&&xx<row&&yy>=0&&yy<col&&map[xx][yy]<map[x][y])        {            sum=search(xx,yy);            if(maxn<sum)                maxn=sum;        }    }    return maxn+1;}int main(){    int i,j;    while(~scanf("%d%d",&row,&col))    {        for(i=0;i<row;i++)             for(j=0;j<col;j++)             scanf("%d",&map[i][j]);        for(i=0;i<row;i++)            for(j=0;j<col;j++)        {            dp[i][j]=search(i,j);            if(dp[i][j]>ans)                ans=dp[i][j];        }       /* for(i=0;i<row;i++)        {            for(j=0;j<col;j++)            cout<<dp[i][j]<<" ";            cout<<endl;        }*/     cout<<ans<<endl;    }    return 0;}


1 0
原创粉丝点击