xynuoj 1799 skiing

3人阅读 评论(0) 收藏 举报
分类:

1799: skiing

时间限制: 3 Sec  内存限制: 64 MB
[提交][状态][讨论版]

题目描述

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 
  1   2   3  4  5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。

输入

第一行表示有几组测试数据,输入的第二行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。 后面是下一组数据;

输出

输出最长区域的长度。

样例输入

1
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

样例输出

25

提示

来源

nyoj动态规划 

广搜(注意边界和转入下次搜索的条件)+DP

#include<stdio.h>
int map[110][110];//存储该点的高度
int dp[110][110];//存储到(i,j)的时候的最长的长度 
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//表示方向 
int R,C;
int bfs(int x,int y){//返回的是到该点的最长长度 
	if(dp[x][y]>1){//剪枝,如果已经找到了到该点的最长长度,则直接返回最长长度 
		return dp[x][y];
	}
	for(int i=0;i<4;i++){
		int s,t;
		s=x+dir[i][0];
		t=y+dir[i][1];
		if(s>=0&&s<R&&t>=0&&t<C&&map[s][t]<map[x][y]){
			int maxn=bfs(s,t);
			if(dp[x][y]<maxn+1){
				dp[x][y]=maxn+1;
			}
		}
	} 
	return dp[x][y];
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%d %d",&R,&C);
		for(int i=0;i<R;i++){
			for(int j=0;j<C;j++){
				scanf("%d",&map[i][j]);
				dp[i][j]=1;
			}
		}
		int max=-1;
		for(int i=0;i<R;i++){
			for(int j=0;j<C;j++){//时间复杂度为O(n^3)
				bfs(i,j);
				if(dp[i][j]>max)
				max=dp[i][j];
			}
		}
		printf("%d\n",max);
	}
	return 0;
} 

查看评论

南理OJ_skiing(动态规划)

#include #include #include #include using namespace std; const int MAXN = 100+5; int G[MAXN][MAXN]...
  • czkct
  • czkct
  • 2015-11-20 11:38:29
  • 406

skiing(动态规划)

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

南阳理工oj 10 skiing 动态规划

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

nyoj 10 skiing 记忆化搜索

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

动态规划解决skiing问题

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

【bzoj1799】 AHOI2009 同类分布 数位dp

好久没写数位dp了,学习了一种新的数位dp的写法,没有以前的复杂,不需要分dp和计算两步了,而且少了一位状态,快了很多。 题解可以参照:http://timeplayer.blog.163.com/...
  • u012288458
  • u012288458
  • 2015-07-25 15:52:10
  • 622

XYNUOJ 1256 喷水装置(一)—贪心算法

1256: 喷水装置(一) 时间限制: 3 Sec  内存限制: 128 MB 提交: 9  解决: 8 [提交][状态][讨论版][Edit] [TestData] 题目描述 现有一块草坪,长...
  • LiuJiuXiaoShiTou
  • LiuJiuXiaoShiTou
  • 2017-08-01 07:11:28
  • 697

nyoj10 skiing

题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=10 skiing 时间限制:3000 ms  |  内存限制:65535 ...
  • u012414639
  • u012414639
  • 2016-05-03 13:56:53
  • 622

bzoj1744 [Usaco2005 oct]Skiing 奶牛滑雪

其实是很简单的spfa,但是出题人卡精度卡的丧心病狂= =。。#include #include #include #include #define fo(i,a,b) for(int i=a;i=b...
  • qq_35866453
  • qq_35866453
  • 2017-06-13 16:04:45
  • 208

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

滑雪 Time Limit: 1000MS                    Memory Limit: 65536k                            ...
  • NYIST_TC_LYQ
  • NYIST_TC_LYQ
  • 2016-04-15 09:13:52
  • 1032
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1537
    排名: 3万+
    最新评论