南理OJ_skiing(动态规划)

原创 2015年11月20日 11:38:29
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;

const int MAXN =  100+5;
int G[MAXN][MAXN][4];
int d[MAXN][MAXN];
int a[MAXN][MAXN];

int max(int a, int b){
	if(a>b) return a;
	else    return b;
} 

int dp(int i, int j, int r, int c){
	int& ans = d[i][j];
	if(ans>0) return ans;
	ans = 1; 
	if((i-1>=0)   && G[i][j][0])  ans = max(ans, dp(i-1, j, r, c)+1);  //向上 
	if((i+1<=r-1) && G[i][j][2])  ans = max(ans, dp(i+1, j, r, c)+1);  //向下 
	if((j-1>=0)   && G[i][j][3])  ans = max(ans, dp(i, j-1, r, c)+1);  //向左 
	if((j+1<=c-1) && G[i][j][1])  ans = max(ans, dp(i, j+1, r, c)+1); //向右 
	return ans;
}
int _G(int r, int c) {  //存图时,每个点数据都已经事先存储好了 
	for(int i = 0; i < r; i++){
		for(int j = 0; j < c; j++){
			if((i-1>=0)   && a[i][j]>a[i-1][j]) G[i][j][0] = 1;  //向上 
			if((i+1<=r-1) && a[i][j]>a[i+1][j]) G[i][j][2] = 1;  //向下 
			if((j-1>=0)   && a[i][j]>a[i][j-1]) G[i][j][3] = 1;  //向左 
			if((j+1<=c-1) && a[i][j]>a[i][j+1]) G[i][j][1] = 1; //向右 
		}
	}
}
void init(){
	memset(G, 0, sizeof(G));
	memset(d, 0, sizeof(d));
	memset(a, 0, sizeof(a));
}
/*
void print_map(int r, int c){  //打印存图 
	for(int i = 0; i < r; i++){
		for(int j = 0; j < c; j++){
			printf("(%d,%d,%d,%d) ", G[i][j][0], G[i][j][1], G[i][j][2], G[i][j][3]);  //括号中的顺序代表上右下左分别是否能走通 
		}
		printf("\n");
	}
} 
*/
int main(){
	int T;
	scanf("%d", &T);
	while(T--){
		int r, c;
		scanf("%d%d",&r, &c);
		init();
		for(int i = 0; i < r; i++){//存储点
			for(int j = 0; j < c; j++) {
				scanf("%d", &a[i][j]);
			}
		}
		
		_G(r,c);//存图 
		
		int ans = 0; 
		for(int i = 0; i < r; i++){
			for(int j = 0; j < c; j++) {
				ans = max(ans, dp(i, j, r, c));
			}
		}
		
		printf("%d\n", ans);
	//	print_map(r, c); 
	}
	return 0;
}

题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=10

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

nyoj 10 skiing 记忆化搜索

本来毫无计划,不知道刷什么题,好多算法都是只知道一点点,入门级别,本来是要刷一道双线dp题,结果学长说我们自己oj就有这道题,唉~自己oj的题都没透,还想去别的oj。。。。。 之前做了一道记忆化搜索...
  • AcmLzq
  • AcmLzq
  • 2016年05月12日 23:44
  • 478

NYOJ-10 skiing

source link1.tips深度搜索+动态规划。dp[i][j]表示从a[i,j]出发能滑行的最大长度。深搜相邻能滑行的点的最大长度+1。记得要进行记忆化搜索,能节约很多时间。2.code#in...

nyoj10 skiing

题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=10 skiing 时间限制:3000 ms  |  内存限制:65535 ...

skiing(动态规划)

skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当...

nyoj 题目10 skiing —— 南阳oj

题目信息如下: skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述Michael喜欢...

南阳理工oj 10 skiing 动态规划

http://acm.nyist.net/JudgeOnline/problem.php?pid=10 简单的动态规划题,在深搜时需要记录每一个的状态,然后直接就调用了,省了很多时间。 #in...

动态规划解决skiing问题

描述 Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底...
  • tiredoy
  • tiredoy
  • 2014年04月24日 22:45
  • 976

POJ-1088滑雪,典型的动态规划题,与NYOJ-10skiing一样,但NYOJ上时限是3s,用搜索可以过,但在POJ上就超时了~~

滑雪 Time Limit: 1000MS                    Memory Limit: 65536k                            ...

NYOJ10 skiing 【动态规划】+【深搜】

skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域...

OJ动态规划DP题目列表

  • 2010年08月10日 21:30
  • 90KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:南理OJ_skiing(动态规划)
举报原因:
原因补充:

(最多只允许输入30个字)