探 寻 宝 藏--- DP
题目描述
传说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的更多相关文章
- nyoj 712 探 寻 宝 藏--最小费用最大流
问题 D: 探 寻 宝 藏 时间限制: 1 Sec 内存限制: 128 MB 题目描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有 ...
- nyist 61 传纸条 nyist 712 探 寻 宝 藏(双线程dp问题)
http://acm.nyist.net/JudgeOnline/problem.php?pid=61 http://acm.nyist.net/JudgeOnline/problem.php?pid ...
- 问题 1436: 地宫取宝 (dp)
题目传送门 时间限制: 1Sec 内存限制: 128MB 提交: 423 解决: 94 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标 ...
- 河南省第六届ACM程序设计大赛
C: 最舒适的路线 (并查集) #include<cstdio> #include<cstring> #include<iostream> #include< ...
- zzuli 1484 继续双线
1484: 探 寻 宝 藏 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 94 Solved: 52 SubmitStatusWeb Board De ...
- nyoj 探寻宝藏
探 寻 宝 藏 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处 ...
- NYOJ-712 探寻宝藏(第六届河南省程序设计大赛)
探 寻 宝 藏 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫 ...
- ny712 探寻宝藏 ny61 传纸条(1)
探 寻 宝 藏 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处 ...
- NOIP2017 宝藏 题解报告【状压dp】
题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...
随机推荐
- sip常用消息实体参考(系网上摘抄,感谢分享)
1.MESSAGE消息 1)头字段填写说明 Call-id: 必选 CSeq: 必选 ...
- 在 node.js 的 express web 框架中自动注册路由
该方法主要是动态注册自己写的 router . 注册器 router 文件名为 loader.js . var express = require('express'); var fs = requ ...
- APP测试之登录
我们公司产品登录很简单 手机号为账号,每次登录输入短信验证码.验证码为6位数字.登陆后可以记录登录状态.未登录时可以微信登录然后验证或者APP登录后可以在个人中心绑定微信. 一APP内部登录 1.手机 ...
- silverlight调用webservice跨域
下载下面的任何文件放在webservice的根目录下 http://files.cnblogs.com/files/jichunhu/crossdomain.xml http://files.cnbl ...
- Python--Argparse学习感悟
笔者在https://docs.python.org/2/howto/argparse.html#id1上,学习到了argparse的基本概念和使用规范,学习过后忍不住将自己的一些体会和大家分享一下. ...
- Java实现文件压缩与解压
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...
- 利用target的特性,可以实现纯css的tab效果切换
基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1& ...
- java file类的常用方法和属性
1 常用方法 a.createNewFile方法 public boolean createNewFile() throws IOException 该方法的作用是创建指定的文件.该方法只 ...
- [问题解决]《GPU高性能编程CUDA实战》中第4章Julia实例“显示器驱动已停止响应,并且已恢复”问题的解决方法
以下问题的出现及解决都基于"WIN7+CUDA7.5". 问题描述:当我编译运行<GPU高性能编程CUDA实战>中第4章所给Julia实例代码时,出现了显示器闪动的现象 ...
- JS编码解码
一.定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 URI 或其他要 ...