探 寻 宝 藏--- 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 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...
随机推荐
- Mathematica(MMA)闪电入门系列 目录与说明
Mathematica(MMA)闪电入门系列 入口 本文起到目录作用,点击以下链接,可以打开各章: 一.MMA概述二.表操作三.函数与递归四.表达式的计算五.过程式编程和调试技巧六.图形七.程序包 ...
- SpringBoot-Learning
SpringBoot-Learning 本项目内容为Spring Boot教程程序样例. 作者博客:http://blog.didispace.com Spring Boot系列博文:http://b ...
- socket-自我总结(2)
这里总结下一个服务端与多个客户端之间的通信. 先看demo: #/usr/bin/env python #_*_coding:utf-8_*_ __author__ = 'ganzl' import ...
- Scala映射
#映射: 包含一组键值对应元素的集合 val Z=Map(a1->b1,...) //a1如果是字符,需要用双引号括起来 val Z=Map((a1,b1),...) ##可变映射, 内容可更 ...
- java 访问mysql 实例
前提条件: 1.安装eclipse,mysql.java jdk 2.安装mysql connect J (我安装的版本是mysql connect J 5.1.39) 3.配置java环境变量 4 ...
- Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版
Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...
- scala 学习之:list span 用法
Pack consecutive duplicates of list elements into sublists. If a list contains repeated elements the ...
- hdu4044 GeoDefense
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4044 题意:一个树上的塔防游戏.给你n个结点的树,你要在树结点上建塔防御,在第 i 个结点上有 ki ...
- Java线程基础实例
概述 Java线程是一个在实战开发中经常使用的基础功能,而在Java中线程相关的类在java.lang和java.util.concurrent里 Thread package thread.base ...
- C入门---位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算直接对整数在内存中的二进制位进行操作.由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快. (1),与(&)运算 ...