8636 跳格子

该题有题解

时间限制:2457MS  内存限制:1000K
提交次数:139 通过次数:46

题型: 编程题   语言: G++;GCC

Description

    地上有一个n*m 的数字格子,每个格子有一个坐标(i,j)(其中1<=i<=n , 1<=j<=m),规定左上角为(0,0),
右下角为(n,m),你要从最左端的一列的任意位置开始跳到最右边格子外。
下面两条你跳的时候的约束规则:
一、因为你的力气有限,每次只能跳一定的距离。给定一个k 为你的弹跳力,则从(i1,j1)起跳,你能跳到
任意(i2,j2)且符合k>=(i1-i2)*(i1-i2)+( j1-j2)*( j1-j2)。
二、每次你至少要向右走一格,也就是说你不能跳到同一列的格子上戒者往回跳。再换句话说就是依次跳
到的位置的坐标中,j 必须是递增的。
每个格子里边有一个分值,当你跳到那里就可以获取到该格子的分数。
现在请你求出你最多能得多少分?
现在假设有一个5×6 的格子,你的弹跳能力为4,则如图所示你能得到17 分。

跳跃路径为(4,1)->(3,2)->(3,4)->(4,5)->(4,6)->跳出格子。

输入格式

第一行包含一个整数T,表示T 个case。
每个case 第一行包含n m k 三个整数(1<=n,m,k<=100)
接下来n行,每行m个分值,格子里的分数的绝对值小于20000

输出格式

输出最大得分。

输入样例

1
5 6 4
1 2 -1 2 1 1
2 3 -1 2 3 1
3 4 -1 2 2 3
4 2 -1 1 3 4
3 1 -1 1 1 4

输出样例

17

题解

记忆化搜索。每次从第i行第一个开始深搜,记录下搜过的点,下次如果再次搜到这个点就直接返回这个点的值就行了。
(ps:这题很多细节要注意,尽量少点一些没必要的判断,不然很容易超时)

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,m,k;
int map[][];
int dp[][];
int DFS(int l,int r)
{
int maxn=-;
if (r==m) return map[l][r];
if (dp[l][r]) return dp[l][r];
for (int i=; i<=n; ++i)
for (int j=r+; j<=m; ++j)
if ((i-l)*(i-l)+(j-r)*(j-r)<= k)
maxn=max(maxn,DFS(i,j));
dp[l][r]=maxn+map[l][r];
return dp[l][r];
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
memset(dp,,sizeof(dp));
for (int i=; i<=n; ++i)
for (int j=; j<=m; ++j)
scanf("%d",&map[i][j]);
int maxn=-;
for (int i=; i<=n; ++i)
maxn=max(maxn,DFS(i,));
printf("%d\n",maxn);
}
return ;
}

8636 跳格子(dfs+记忆化搜索)的更多相关文章

  1. 不要62 hdu 2089 dfs记忆化搜索

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意: 给你两个数作为一个闭区间的端点,求出该区间中不包含数字4和62的数的个数 思路: 数位dp中 ...

  2. dfs+记忆化搜索,求任意两点之间的最长路径

    C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...

  3. hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

    pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/ ...

  4. hdu 1078(dfs记忆化搜索)

    题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...

  5. UVA 10400 Game Show Math (dfs + 记忆化搜索)

    Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...

  6. poj1088-滑雪 【dfs 记忆化搜索】

    http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 79806 ...

  7. DFS——>记忆化搜索——>动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  8. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  9. POJ 2704 Pascal's Travels 【DFS记忆化搜索】

    题目传送门:http://poj.org/problem?id=2704 Pascal's Travels Time Limit: 1000MS   Memory Limit: 65536K Tota ...

随机推荐

  1. Git 的版本库创建和修改

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  2. 【转】Jmeter(二)-使用代理录制脚本

    Jmeter脚本是以JMX格式为主 Jmeter也是支持录制的,支持第三方录制方式和代理录制方式. 1.第三方录制主要是通过badboy来录制,录制后另存为jmx格式即可. 2.Jmeter也有自己的 ...

  3. Java定时任务器

    java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager { //时间间隔 private static final long PERIOD_ ...

  4. The Key to final data

    // FinalData.java - (insert one line description here) package com.hp.ci.mgmt.perm.hal.localization; ...

  5. Maven pom项目部署

    maven控制台运行程序 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec- ...

  6. win10 Incredibuild 兼容

    电脑换了win10,所有的软件都需要重新安装. win10的体验还是很不错的.但是也有一堆的问题.原来的vs2010今天无法再使用分布式编译IncrediBuild. 现象是,虽然可以连上分布式编译的 ...

  7. iOS学习之Runtime(一)

    一.Runtime简介 因为Objective-C是一门动态语言,所以它总是想办法把一些决定性工作从编译链接推迟到运行时,也就是说只有编译器是不够的,还需要一个运行时系统(runtime system ...

  8. 4. printf 命令

    1. printf 命令的语法 printf format-string [arguments...] 参数说明: format-string: 为格式控制字符串 arguments: 为参数列表. ...

  9. SpringMVC 系列教程1-文件上传-配置

    SpringMVC默认没有配置上传解析器 使用SpringMVC来处理上传必须添加对MultipartResolver上传解析器的声明配置. 配置之后,客户端每次进行请求的时候,SpringMVC都会 ...

  10. Ubuntu 14.0 升级内核到指定版本

    1.卸载现有内核sudo apt purge linux-headers-* linux-headers-*-generic linux-image-*-generic linux-image-ext ...