skiing

时间限制:3000 ms  |  内存限制:65535 KB
难度:5
描写叙述
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
来源
经典题目

import java.util.Arrays;
import java.util.Scanner; public class NYOJ10_ieayoio {
public static int [][]map;
public static int [][]f;
public static int []dx={0,1,0,-1,0};
public static int []dy={0,0,-1,0,1};
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int t=input.nextInt();
while (t-->0){
int n=input.nextInt();
int m=input.nextInt();
map=new int [n+5][m+5];
for (int i=0;i<map[0].length;i++)
Arrays.fill(map[i], Integer.MAX_VALUE);
f= new int [n+5][m+5];
for (int i=0;i<f[0].length;i++)
Arrays.fill(f[i], 1);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
map[i][j]=input.nextInt();
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++){
dfs(i,j);
}
int max=Integer.MIN_VALUE;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
if (max<f[i][j]) max=f[i][j];
}
System.out.println(max); }
}
static int dfs(int x,int y)
{
if (f[x][y]!=1) return f[x][y];
if (isnoway(x,y)==false){
return 1;
}
for (int i=1;i<=4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if (map[x][y]>map[xx][yy]){
int comway=1+dfs(xx,yy);
if (f[x][y]<comway) f[x][y]=comway;
}
}
return f[x][y];
}
static boolean isnoway(int x,int y){
boolean flag=false;
if (map[x][y]>map[x+dx[1]][y+dy[1]]) flag=true;
if (map[x][y]>map[x+dx[2]][y+dy[2]]) flag=true;
if (map[x][y]>map[x+dx[3]][y+dy[3]]) flag=true;
if (map[x][y]>map[x+dx[4]][y+dy[4]]) flag=true;
return flag;
} }

挺高兴的一直感觉没把握做的题,做了两天,经过调试通过例子后,没想到一次性提交就过了

方法就是深搜,只是就是加了一个数组f[x][y],来保存点(x,y)可滑到最低点的最长距离,dfs(x,y)用来深搜这个距离,若f[x][y]已存在,则将函数的值直接返回为f[x][y],

isnoway函数式来推断点(x,y)能否够向更低点滑行

NYOJ10,skiing的更多相关文章

  1. nyoj 10 skiing(记忆化搜索)

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

  2. skiing(搜索+记忆化搜索)

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

  3. ACM Skiing问题

    ACM Skiing问题 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michae ...

  4. 2017 ACM-ICPC(乌鲁木齐赛区)网络赛 H.Skiing 拓扑排序+最长路

    H.Skiing In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort h ...

  5. POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)

    题目链接: https://cn.vjudge.net/problem/POJ-3037 Bessie and the rest of Farmer John's cows are taking a ...

  6. 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H. Skiing (拓扑排序+假dp)

    题目链接:https://nanti.jisuanke.com/t/16957 题目: In this winter holiday, Bob has a plan for skiing at the ...

  7. NYOJ 10 skiing(好题)

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

  8. NYOJ 10 skiing (深搜和动归)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪. 由于滑雪的确非常刺激.但是为了获得速度.滑的区域必须向下倾斜.并且 ...

  9. 【BZOJ】3432: [Usaco2014 Jan]Cross Country Skiing (bfs+二分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3432 题目说要相互可达,但是只需要从某个点做bfs然后判断其它点是否可达即可. 原因太简单了.... ...

随机推荐

  1. 字节流复制mp3文件(带缓冲区)

    //自定义的缓冲区 import java.io.*; class  MyBufferedInputStream{    private byte[] buf = new byte[1024]; pr ...

  2. Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connectio (andriod sdk manager) http://dl-ssl.google.com/android上不去解决方案

    Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml  Fetched Add-ons List succes ...

  3. CSS3 总结-1

    新的边框属性 属性 描述 CSS border-image 设置所有 border-image-* 属性的简写属性. 3 border-radius 设置所有四个 border-*-radius 属性 ...

  4. S2S:分享出的营销机遇

    (速途网专栏 作者:高学争)经常在网上购物的你,有没有遇到过这样的问题:你知道自己想买什么,但是在淘宝上一搜,出来了数以万计的同类型,他们有着同样的价位(甚至可能是同样的图片),但是由不同的商家提供, ...

  5. EAN 通用商品条形码

    商品条形码是指由一组规则排列的条.空及其对应字符组成的标识,用以表示一定的商品信息的符号.其中条为深色.空为纳色,用于条形码识读设备的扫描识读.其对应字符由一组阿拉伯数字组成,供人们直接识读或通过键盘 ...

  6. QT无标题窗口在任务栏显示关闭(增加系统菜单)

    在对话框中使用了如下代码: setWindowFlags(Qt::FramelessWindowHint); 在任务栏上右键点击程序,不会弹出菜单,解决办法,使用下面代码: setWindowFlag ...

  7. poco vs Boost

    Wooce Yang收集整理 POCO的优点: 1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级. 2) 比 boost:asio更全面的网络库.但是boost:a ...

  8. java学习之反射

    package com.gh.ref; public class Person { private String name; private int age; private char sex; pr ...

  9. imagemagick /tmp/magick-xxxxxxxx

    问题 imagemagick在某种场景下会狂写/tmp目录,文件名形如magick-xxxxxxxx, ls -lh查看这些文件达到几百G, du -sh查看则只有几十M 被这个问题折磨了许久,大晚上 ...

  10. JDBC批量运行executeBatch

    JDBC运行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比較用得多的还是PreparedStatement 只是在运行批量,Prepare ...