Poj 1088 滑雪
2012-07-19 22:37
423 查看
动态规划,求任一点的最长降序串长度,等于周围的 点的最长降序串的长度的最大值加一。而总有一点是的周围点的高度,都小于等于它。但是第一次提交的时候我居然把 横行,纵列的数据输入反了。。。|||
#include <stdio.h> #include <string.h> #define MAXL (100+5) int dir[4][2]={ {-1,0},{0,1},{1,0},{0,-1} }; int map[MAXL][MAXL]; int best[MAXL][MAXL]; int R,C,MAX; int max( int x, int y) { return x>y ? x :y ; } int in_map( int cloumn,int row) { if( cloumn < 1 || cloumn >C ) return 0; if( row <1 || row >R ) return 0; return 1; } void dp(int cloumn,int row) { int i; int cur_cloumn,cur_row; if( best[cloumn][row] != -1) return ; best[cloumn][row]=1; for( i=0;i<4;i++) { cur_cloumn = cloumn+dir[i][0]; cur_row = row+dir[i][1]; if( in_map( cur_cloumn , cur_row ) && map[cur_cloumn][cur_row] > map [cloumn][row] ) { if( best[cur_cloumn][cur_row] == -1 ) dp( cur_cloumn,cur_row ); best[cloumn][row] = max( best[cur_cloumn][cur_row]+1 , best[cloumn][row] ); } } MAX=max( MAX,best[cloumn][row] ); } int main() { int i,j; while( ~scanf("%d%d",&C,&R) ) { for(i=1;i<=C;i++) for(j=1;j<=R;j++) scanf("%d",&map[i][j]); memset( best,-1,sizeof(best) ); MAX=0; for(i=1;i<=C;i++) for(j=1;j<=R;j++) dp(i,j); printf("%d\n",MAX); } return 0; }
相关文章推荐
- poj 1088 滑雪
- POJ 1088 滑雪
- 记忆化搜索:POJ1088-滑雪(经典的记忆化搜索)
- POJ 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪 (记忆化搜索)
- poj 1088 滑雪 记忆化搜索
- poj1088滑雪,记忆搜索,动态规划问题
- POJ1088 滑雪 | UVa10285 - Longest Run on a Snowboard
- POJ-1088 滑雪(深搜+枚举)
- 【POJ】1088.滑雪
- POJ 1088 滑雪 记忆化搜索(搜索 + dp)
- Poj 1088 滑雪
- 【POJ】1088滑雪
- POJ 1088:滑雪
- POJ 1088 滑雪【记忆化搜索】
- POJ 1088 滑雪 DFS 记忆化搜索
- POJ - 1088 滑雪【记忆化搜索】
- poj 1088 滑雪--DP or 深搜?