当前位置:网站首页>nyoj 712 探 寻 宝 藏(双线dp 第六届河南省程序设计大赛)
nyoj 712 探 寻 宝 藏(双线dp 第六届河南省程序设计大赛)
2022-08-08 18:34:00 【51CTO】
探 寻 宝 藏
1000 ms | 内存限制: 65535
5
传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物。某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有宝物,最珍贵的宝物就藏在右下角,迷宫的进出口在左上角。当然,迷宫中的通路不是平坦的,到处都是陷阱。Dr.Kong决定让他的机器人卡多去探险。
但机器人卡多从左上角走到右下角时,只会向下走或者向右走。从右下角往回走到左上角时,只会向上走或者向左走,而且卡多不走回头路。(即:一个点最多经过一次)。当然卡多顺手也拿走沿路的每个宝物。
Dr.Kong希望他的机器人卡多尽量多地带出宝物。请你编写程序,帮助Dr.Kong计算一下,卡多最多能带出多少宝物。
第一行: K 表示有多少组测试数据。
接下来对每组测试数据:
第1行: M N
第2~M+1行: Ai1 Ai2 ……AiN (i=1,…..,m)
【约束条件】
2≤k≤5 1≤M, N≤50 0≤Aij≤100 (i=1,….,M; j=1,…,N)
所有数据都是整数。 数据之间有一个空格。
输出 对于每组测试数据,输出一行:机器人卡多携带出最多价值的宝物数 样例输入
样例输出
来源 第六届河南省程序设计大赛
上传者 ACM_赵铭浩
这道题和以往我们做的dp不同之处就在于 是一去一回
加入只有去 我们可以 用动态规划方程 dp[i][j]=max(dp[i-1][j],dp[i][j-1])+map[i][j].
而这道题去了又回来 我们可以理解为两个人同时从左上角去 不过不走相同的路
如果两个人不走相同的路 那么这两个人必须不在相同的列或者行 又因为 两个人走的步数完全相同
所以我们可以通过一个人走的步数得到另外一个人走的步数
我们可以通过一个四维的数组来保存
于是这个时候的动态规划方程
附上代码:
由于四维数组占用的空间特别大 又因为在这道题中两个人走的步数完全相同 也就是i+j=k+l 所以我们可以通过步数 转换为3维的
dp[k][i][j] 其中k为当前走的步数 i为第一个人的行左边 j为第二个人的行坐标
又因为我所建的图左上角坐标为(1,1) 所以从左上角到右下角需要的最少步数为m+n-2
这个时候的动态转移方程为
ac代码:
边栏推荐
猜你喜欢
随机推荐
Fortinet new cloud native protection products launched amazon cloud platform of science and technology
uva1468
LeetCode:每日一题【第二周】
PX4模块设计之十八:Logger模块
mv-lcd初始化
Shell正则表达式
携手华为打造鲲鹏产业生态 | 麒麟信安亮相鲲鹏开发者创享日·长沙站
FTP服务初探
APICloud AVM 封装日期和时间选择组件
hdu1042 N!(大数)
view, index
Research on ORACLE subqueries that lead to inability to push predicates
【761. Special binary sequence】
十六、一起学习Lua 文件 I/O
黑磷量子点/无机荧光量子点/石墨烯量子点水凝胶/量子点/纳米水凝胶荧光探针的研究制备
QT With OpenGL (Bloom) (Bloom)
Oracle存储修改以前的历史记录,怎么查找?
Laravel 5.8笔记
Flush can buy stock?Is it safe to buy stocks?
2021年9月电子学会图形化三级编程题解析含答案:绘制图形









