poj 1088 滑雪 (状态压缩DP)
2014-01-20 22:21
302 查看
题目链接:
poj 1088
题目大意: 给出NxM的矩阵,每个点的值都不同
若某点四个方向中某个方向的值比它小则可以移动,求能够走的最长步数
解题思路: 经典的状态压缩Dp,Dp[ x ][ y ]记录从(x , y)点出发能走的最长步数
Dp[ x ][ y ]=Max(Dp[ x ][ y ],DFS(xx , yy) + 1)
若某个点之前已经走过,则不用再走,直接返回之前所能走到的最大值
代码:
poj 1088
题目大意: 给出NxM的矩阵,每个点的值都不同
若某点四个方向中某个方向的值比它小则可以移动,求能够走的最长步数
解题思路: 经典的状态压缩Dp,Dp[ x ][ y ]记录从(x , y)点出发能走的最长步数
Dp[ x ][ y ]=Max(Dp[ x ][ y ],DFS(xx , yy) + 1)
若某个点之前已经走过,则不用再走,直接返回之前所能走到的最大值
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 120 #define Max(a,b) ((a>b)?a:b) int Map[MAX][MAX],Dp[MAX][MAX]; int n,m,Fx[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; int DFS(int x,int y) { int i,xx,yy; if(Dp[x][y]!=0) //已经搜索过的直接返回 return Dp[x][y]; for(i=0;i<4;i++) { xx=Fx[i][0]+x; yy=Fx[i][1]+y; if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&Map[x][y]>Map[xx][yy]) //可以往下搜索 Dp[x][y]=Max(Dp[x][y],DFS(xx,yy)+1); } return Dp[x][y]; //x,y为起点的最优解 } int main() { int i,j,M; while(scanf("%d%d",&n,&m)!=EOF) { M=0; memset(Dp,0,sizeof(Dp)); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) scanf("%d",&Map[i][j]); } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { Dp[i][j]=DFS(i,j); //枚举起点 M=Max(Dp[i][j],M); } } printf("%d\n",M+1); } return 0; }
相关文章推荐
- poj 2411 Mondriaan's Dream(状态压缩+dp)
- poj 1185 炮兵阵地(经典状态压缩dp)
- POJ-1088 滑雪 (记忆化搜索,dp)
- (DP6.1.4.2)POJ 1088 滑雪
- poj 2411 Mondriaan's Dream(状态压缩dP)
- poj 1185 炮兵阵地(状态压缩dp)
- poj 1185 炮兵阵地 (状态压缩DP)
- POJ 3254(状态压缩DP)
- POJ 3311 旅行商问题 状态压缩 dp
- POJ 3311 状态压缩DP简单题
- POJ1185——炮兵阵地(状态压缩dp)
- POJ 3311 Hie with the Pie (状态压缩DP ,TSP问题)
- POJ 1088 滑雪(DP)
- POJ 2288 Islands and Bridges (TSP 状态压缩DP)
- poj 3254 Corn Fields【状态压缩dp-入门】
- 状态压缩DP总结【POJ3254】【POJ1185】【POJ3311】【HDU3001】【POJ2288】【ZOJ4257】【POJ2411】【HDU3681】
- POJ 1185 (状态压缩DP)
- POJ 3254 Corn Field ( 状态压缩DP )
- 状态压缩DP 入门 POJ 3254
- POJ 2817 WordStack(状态压缩DP)