首页 > 代码库 > poj 1088 滑雪
poj 1088 滑雪
滑雪
Time Limit: 1000MS | Memory Limit: 65536K | |
Total 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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。