题目描述

传说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)

所有数据都是整数。 数据之间有一个空格。

输出

对于每组测试数据,输出一行:机器人卡多携带出最多价值的宝物数

样例输入

2
2 3
0 10 10
10 10 80
3 3
0 3 9
2 8 5
5 7 100

样例输出

120
134 题目大意: 走两边的dp dp
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <stack>
using namespace std; int dp[][][];
int a[][]; #define max4(a,b,c,d) max(max(a,b),max(c,d)) int main()
{
int t, n, m;
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
scanf("%d", &a[i][j]);
}
memset(dp, , sizeof(dp));
dp[][][] = a[][];
for(int k=; k<=n+m-; k++)
{
for(int i=; i<=k+; i++)
{
for(int j=; j<=k+; j++)
{
dp[k][i][j] = max4(dp[k-][i][j], dp[k-][i-][j], dp[k-][i][j-], dp[k-][i-][j-]);
if(i!=j)
dp[k][i][j]+=a[i][k+-i]+a[j][k+-j];
else
dp[k][i][j]+=a[i][k+-i];
}
}
}
printf("%d\n", dp[n+m-][n][n]);
} return ;
}

记忆化搜索

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <stack>
using namespace std; int dp[][][];
int a[][]; #define max4(a,b,c,d) max(max(a,b),max(c,d)) int DFS(int k, int i1, int i2)
{
if(dp[k][i1][i2])
return dp[k][i1][i2];
if(k==||i1==||i2==||k+-i1==||k+-i2==)
return dp[k][i1][i2];
dp[k][i1][i2] = max4(DFS(k-, i1-, i2), DFS(k-, i1, i2-), DFS(k-, i1-, i2-), DFS(k-, i1, i2));
if(i1!=i2)
dp[k][i1][i2] += a[i1][k+-i1]+a[i2][k+-i2];
else
dp[k][i1][i2] += a[i1][k+-i1]; return dp[k][i1][i2];
} int main()
{
int t, n, m;
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
scanf("%d", &a[i][j]);
}
memset(dp, , sizeof(dp));
dp[][][] = a[][];
int ans = DFS(n+m-, n, n);
printf("%d\n", ans);
} return ;
}

探 寻 宝 藏--- DP的更多相关文章

  1. nyoj 712 探 寻 宝 藏--最小费用最大流

    问题 D: 探 寻 宝 藏 时间限制: 1 Sec  内存限制: 128 MB 题目描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有 ...

  2. nyist 61 传纸条 nyist 712 探 寻 宝 藏(双线程dp问题)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=61 http://acm.nyist.net/JudgeOnline/problem.php?pid ...

  3. 问题 1436: 地宫取宝 (dp)

    题目传送门 时间限制: 1Sec 内存限制: 128MB 提交: 423 解决: 94 题目描述 X  国王有一个地宫宝库.是  n  x  m  个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标 ...

  4. 河南省第六届ACM程序设计大赛

    C:  最舒适的路线 (并查集) #include<cstdio> #include<cstring> #include<iostream> #include< ...

  5. zzuli 1484 继续双线

    1484: 探 寻 宝 藏 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 94  Solved: 52 SubmitStatusWeb Board De ...

  6. nyoj 探寻宝藏

    探 寻 宝 藏 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处 ...

  7. NYOJ-712 探寻宝藏(第六届河南省程序设计大赛)

    探 寻 宝 藏 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫 ...

  8. ny712 探寻宝藏 ny61 传纸条(1)

    探 寻 宝 藏 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处 ...

  9. NOIP2017 宝藏 题解报告【状压dp】

    题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...

随机推荐

  1. sip常用消息实体参考(系网上摘抄,感谢分享)

    1.MESSAGE消息       1)头字段填写说明       Call-id:                 必选       CSeq:                   必选       ...

  2. 在 node.js 的 express web 框架中自动注册路由

    该方法主要是动态注册自己写的 router . 注册器 router 文件名为 loader.js  . var express = require('express'); var fs = requ ...

  3. APP测试之登录

    我们公司产品登录很简单 手机号为账号,每次登录输入短信验证码.验证码为6位数字.登陆后可以记录登录状态.未登录时可以微信登录然后验证或者APP登录后可以在个人中心绑定微信. 一APP内部登录 1.手机 ...

  4. silverlight调用webservice跨域

    下载下面的任何文件放在webservice的根目录下 http://files.cnblogs.com/files/jichunhu/crossdomain.xml http://files.cnbl ...

  5. Python--Argparse学习感悟

    笔者在https://docs.python.org/2/howto/argparse.html#id1上,学习到了argparse的基本概念和使用规范,学习过后忍不住将自己的一些体会和大家分享一下. ...

  6. Java实现文件压缩与解压

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...

  7. 利用target的特性,可以实现纯css的tab效果切换

    基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1& ...

  8. java file类的常用方法和属性

    1 常用方法       a.createNewFile方法 public boolean createNewFile() throws IOException 该方法的作用是创建指定的文件.该方法只 ...

  9. [问题解决]《GPU高性能编程CUDA实战》中第4章Julia实例“显示器驱动已停止响应,并且已恢复”问题的解决方法

    以下问题的出现及解决都基于"WIN7+CUDA7.5". 问题描述:当我编译运行<GPU高性能编程CUDA实战>中第4章所给Julia实例代码时,出现了显示器闪动的现象 ...

  10. JS编码解码

    一.定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 URI 或其他要 ...