NYOJ—飞翔【动态规划】

本文通过NYOJ的一道动态规划题目——飞翔,介绍如何在限制内存的情况下求解最短路径问题。作者首先尝试使用常规的动态规划方法,但因数据范围过大导致超内存。接着,作者分享了优化思路,即通过计算最长递增特殊路段序列来减少空间需求,并给出了最终的代码实现。
摘要由CSDN通过智能技术生成

飞翔

时间限制:3000 ms | 内存限制:65535 KB
难度:4

描述

鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧。于是,他们决定举办一场比赛,比赛的地方将在一个迷宫之中。
这些鹰的起始点被设在一个N*M矩阵的左下角map[1,1]的左下角。终点被设定在矩阵的右上角map[N,M]的右上角,有些map[i,j]是可以从中间穿越的。每一个方格的边长都是100米。如图所示:
feixiang
没有障碍,也没有死路。这样设计主要是为了高速飞行的鹰们不要发现死路来不及调整而发生意外。潘帕斯雄鹰冒着减RP的危险从比赛承办方戒备森严的基地中偷来了施工的地图。但是问题也随之而来,他必须在比赛开始之前把地图的每一条路都搞清楚,从中找到一条到达终点最近的路。(哈哈,笨鸟不先飞也要拿冠军)但是此鹰是前无古鹰,后无来鹰的吃菜长大的鹰–菜鸟。他自己没有办法得出最短的路径,于是紧急之下找到了学OI的你,希望找到你的帮助。

输入

本题有多组数据。以EOF为输入结束的标志。
每组测试数据的首行为n,m(0

输出

仅一行,1,1–>n,m的最短路径的长度,四舍五入保留到整数即可
样例输入

3 2
3
1 1
3 2
1 2

样例输出

383

思路:

刚开始看到题目就想着开一个数组模拟过程,每个点使用Map先判断是否可以穿越,然后在下方右方和对角中找到最小的这样重点一定是最小的。但是看到数据范围 107 无法建正常表就用到LCS对空间的优化,由于只用到了当前行和上一行,所以只用两行来保存状态,自认为可以过了结果最后还是超内存,看来别人的思路才发现是路径是可以直接算出来,只需要找到有多少条递增的特殊路段序列。
计算方法,没有特殊路段时道路要经过的路为(n+m)段,一条特殊路段可以减少( 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值