Problem C

Longest Run on a Snowboard

Input: standard input

Output: standard output

Time Limit: 5 seconds

Memory Limit: 32 MB

 

Michael likes snowboarding. That's not very surprising, since snowboarding is really great. The bad thing is that in order to gain speed, the area must slide downwards. Another disadvantage is that when you've reached the bottom of the hill you have to walk
up again or wait for the ski-lift.

Michael would like to know how long the longest run in an area is. That area is given by a grid of numbers, defining the heights at those points. Look at this example:

 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

One can slide down from one point to a connected other one if and only if the height decreases. One point is connected to another if it's at left, at right, above or below it. In the sample map, a possible slide would be 24-17-16-1 (start
at 24, end at 1). Of course if you would go 25-24-23-...-3-2-1, it would be a much longer run. In fact, it's the longest possible.

Input

The first line contains the number of test cases N. Each test case starts with a line containing the name (it's a single string), the number of rows R and the number of columns C. After that follow R lines
with C numbers each, defining the heights. R and C won't be bigger than 100N not bigger than 15 and the heights are always in the range from 0 to 100.

For each test case, print a line containing the name of the area, a colon, a space and the length of the longest run one can slide down in that area.

Sample Input
2
Feldberg 10 5
56 14 51 58 88
26 94 24 39 41
24 16 8 51 51
76 72 77 43 10
38 50 59 84 81
5 23 37 71 77
96 10 93 53 82
94 15 96 69 9
74 0 62 38 96
37 54 55 82 38
Spiral 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

 

Sample Output

Feldberg: 7
Spiral: 25

(Math Lovers’ Contest, Problem Setter: Stefan Pochmann)

 

题意:

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(从24開始,1结束)。

当然。假如你想要滑25-24-23-22-....-3-2-1 也能够,这比上一条路径长多了。

其实,这也是最长的路径了。

思路:DAG上的动态规划,仅仅是方向变成了上下左右四个方向,状态转移公式没有变化。

#include<iostream>
#include<cstring> using namespace std; int map[110][110],vis[110][110],arry[110][110];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,m; int dp(int x,int y)
{
if(vis[x][y]) return arry[x][y];
for(int i=0;i<4;i++)
{
int dx=x+dir[i][0],dy=y+dir[i][1];
if(dx>=0&&dx<n&&dy>=0&&dy<m&&map[dx][dy]<map[x][y])
{
arry[x][y]=max(dp(dx,dy)+1,arry[x][y]);
}
}
vis[x][y]=1;
return arry[x][y];
} int main()
{
int num;
cin>>num;
while(num--)
{
string name;
cin>>name>>n>>m;
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>map[i][j];
arry[i][j]=0;
}
}
int maxn=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int cnt=dp(i,j);
if(cnt>maxn) maxn=cnt;
}
}
cout<<name<<": "<<maxn+1<<endl;
}
return 0;
}

[动态规划]UVA10285 - Longest Run on a Snowboard的更多相关文章

  1. UVA-10285 Longest Run on a Snowboard (递推)

    题目大意:滑雪.给一个二维数组,找出最长的连续下降序列的长度. 题目分析:定义dp(i,j)表示以a[i][j]结尾的最长连续下降序列的长度,则dp(i,j)=max(dp(i-1,j),dp(i+1 ...

  2. UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)

    Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 seconds Memor ...

  3. UVA 10285 Longest Run on a Snowboard(记忆化搜索)

    Problem C Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 sec ...

  4. 「日常训练」 Longest Run on a Snowboard (UVA-10285)

    题意 其实就是一条二维的LIS,但是还是做的一愣一愣的,多努力. 考虑$dp[i][j]$为从(i,j)出发的二维LIS的最大值,那么$dp[i][j]=max\{dp[i−di[k]][j−dj[k ...

  5. 题解 UVA10285 最长的滑雪路径 Longest Run on a Snowboard

    Solution 双倍经验 就是记搜嘛. 搞一个二维数组记录一下当前的最长滑雪路径,其他和普通 dfs 没什么两样. 向 \(4\) 个方向搜索,如果高度符合就 \(+1\) . 多测要注意数组初始化 ...

  6. UVa 10285 Longest Run on a Snowboard【记忆化搜索】

    题意:和最长滑雪路径一样, #include<iostream> #include<cstdio> #include<cstring> #include <c ...

  7. Longest Run on a Snowboard

    题意: n*m的矩阵,求矩阵中最长下降的序列的长度. 分析: dp[i][j]表示以i,j为起点的最长下降序列,然后记忆化搜索. #include <map> #include <s ...

  8. UVa 10285 - Longest Run on a Snowboard

    称号:给你一个二维矩阵,找到一个点.每一个可以移动到的位置相邻的上下,求最长单调路径. 分析:贪婪,dp.搜索. 这个问题是一个小样本,我们该怎么办. 这里使用贪心算法: 首先.将全部点依照权值排序( ...

  9. UVA - 10285 Longest Run on a Snowboard (线性DP)

    思路:d[x][y]表示以(x, y)作为起点能得到的最长递减序列,转移方程d[x][y] = max(d[px][py] + 1),此处(px, py)是它的相邻位置并且该位置的值小于(x, y)处 ...

随机推荐

  1. Nmap笔记本

    nmap -vv 192.168.1.100 -p1-65535 跑1-65535的端口并且设置对结果的详细输出 nmap -vv 192.168.1.1/8 -p 1433 --open 跑开放14 ...

  2. 加密web.config中的邮件配置mailSettings

    加密: 在命令提示符下键入: aspnet_regiis -pef connectionStrings 要加密的web.config完整路经 演示样例:C:\Program Files (x86)\M ...

  3. Linux网络实时监控配置

    Linux监控邮件发送配置 网络状态监控 网络状态:netstat 各个状态的总计,详情:以及重点端口的详细连接情况(22,25,80,3306,8080),打印客户端连接数最多的ip. 邮件报告当前 ...

  4. 日期类Date

    Java在日期类中封装了有关日期和时间的信息,用户可以通过调用相应的方法来获取系统时间或设置日期和时间.Date类中有很多方法在JDK1.0公布后已经过时了,在8.3中我们将介绍JDK1.0中新加的用 ...

  5. 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest D Dividing Marbles

    题目大意: 给出一个$N(N <= 2^{22}$),$N$的二进制表示中1的个数不超过4.  一开始有一个集合$S = {N}$, 每次操作可以选择$n\in S \ (n > 1)$, ...

  6. javaEE面试重点

    Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息.创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation ...

  7. jquery page

  8. 蓝桥杯 第三届C/C++预赛真题(6) 大数乘法(数学题)

    对于32位字长的机器,大约超过20亿,用int类型就无法表示了,我们可以选择int64类型,但无论怎样扩展,固定的整数类型总是有表达的极限!如果对超级大整数进行精确运算呢?一个简单的办法是:仅仅使用现 ...

  9. hdu 4706:Children's Day(模拟题,模拟输出大写字母 N)

    Children's Day Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  10. 解决百度地图Fragment切换黑屏问题

    https://blog.csdn.net/rentalphang/article/details/52076330 轻松解决啦!