poj 1661 Help Jimmy(记忆化搜索)
题目链接:http://poj.org/problem?id=1661
一道还可以的记忆化搜索题,主要是要想到如何设dp,记忆化搜索是避免递归过程中的重复求值,所以要得到dp必须知道如何递归
由于这是个可以左右移动的所以递归过程肯定设计左右所以dp的一维为从左边下或者从右边下,而且和层数有关所以另一维为层数
于是便可以得到dp[count][flag],flag=1表示count层从左边下要多久,flag=0表示count层从右边下要多久。然后就是dfs的递归
过程
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 2e4 + 10 , MM = 6e4 + 10;
int n , x , y , MAX;
int dp[1010][2];
struct TnT {
int sta , ed , h;
}s[1010];
bool cmp(TnT a , TnT b) {
return a.h > b.h;
}
int dfs(int count , int flag) {
if(count == n) {
return 0;
}
int ans = MM;
if(dp[count][flag] != -1) {
return dp[count][flag];
}
int temp = count;
for(int i = count + 1 ; i <= n ; i++) {
temp = i;
if(s[count].h - s[i].h <= MAX) {
if(flag == 1) {
if(s[count].ed <= s[i].ed && s[count].ed >= s[i].sta) {
ans = min(dfs(i , flag) + s[i].ed - s[count].ed , dfs(i , 1 - flag) + s[count].ed - s[i].sta);
break;
}
}
if(flag == 0) {
if(s[count].sta <= s[i].ed && s[count].sta >= s[i].sta) {
ans = min(dfs(i , flag) + s[count].sta - s[i].sta , dfs(i , 1 - flag) + s[i].ed - s[count].sta);
break;
}
}
}
else {
break;
}
}
if(ans == MM) {
if(temp == n) {
if(s[count].h > MAX) {
dp[count][flag] = ans;
return ans;
}
else {
ans = 0;
dp[count][flag] = ans;
return ans;
}
}
dp[count][flag] = ans;
return ans;
}
else {
dp[count][flag] = ans;
return ans;
}
}
int main() {
int t;
scanf("%d" , &t);
while(t--) {
scanf("%d%d%d%d" , &n , &x , &y , &MAX);
for(int i = 1 ; i <= n ; i++) {
scanf("%d%d%d" , &s[i].sta , &s[i].ed , &s[i].h);
}
sort(s + 1 , s + n + 1 , cmp);
s[0].sta = s[0].ed = x , s[0].h = y;
s[n + 1].sta = -M , s[n + 1].ed = M , s[n + 1].h = 0;
memset(dp , -1 , sizeof(dp));
int gg = dfs(0 , 0);
gg = min(dfs(0 , 1) , gg);
printf("%d\n" , gg + y);
}
return 0;
}
poj 1661 Help Jimmy(记忆化搜索)的更多相关文章
- POJ 1088 滑雪(记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 92384 Accepted: 34948 Description ...
- POJ 1088 滑雪 DFS 记忆化搜索
http://poj.org/problem?id=1088 校运会放假继续来水一发^ ^ 不过又要各种复习,功课拉下了许多 QAQ. 还有呀,就是昨天被一个学姐教育了一番,太感谢了,嘻嘻^ ^ 好了 ...
- POJ 1088 滑雪【记忆化搜索】
题意:给出一个二维矩阵,要求从其中的一点出发,并且当前点的值总是比下一点的值大,求最长路径 记忆化搜索,首先将d数组初始化为0,该点能够到达的路径长度保存在d数组中,同时把因为路径是非负的,所以如果已 ...
- poj 1088 滑雪_记忆化搜索
题意:略 直接用记忆化搜索就行了 #include<cstdio> #include<iostream> using namespace std; int n,m; int m ...
- POJ 3176-Cow Bowling(DP||记忆化搜索)
Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14210 Accepted: 9432 Desc ...
- HDU 1501 & POJ 2192 Zipper(dp记忆化搜索)
题意:给定三个串,问c串是否能由a,b串任意组合在一起组成,但注意a,b串任意组合需要保证a,b原串的顺序 例如ab,cd可组成acbd,但不能组成adcb. 分析:对字符串上的dp还是不敏感啊,虽然 ...
- POJ 1088 滑雪 【记忆化搜索经典】
题目链接:http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: ...
- POJ 3373 Changing Digits 记忆化搜索
这道题我是看了别人的题解才做出来的.题意和题解分析见原文http://blog.csdn.net/lyy289065406/article/details/6698787 这里写一下自己对题目的理解. ...
- poj 1695 Magazine Delivery 记忆化搜索
dp[a][b][c],表示三个人从小到大依次在a,b.c位置时.距离结束最少的时间. 每次选一个人走到c+1位置搜索就好了. 坑点在于不能floyd.预计题目没说清楚.意思就是假设没送Li,那么Li ...
- poj 1163 The Triangle 记忆化搜索
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44998 Accepted: 27175 De ...
随机推荐
- windows server 2008 R2中建立ftp站点
在windows server 2008 R2中建立ftp站点,要遵循以下步骤: (1) 开启IIS中的ftp服务: (2) 在IIS中建立ftp站点. 具体过程如下: (1) 开启IIS中的ftp服 ...
- Kafka消息队列初识
一.Kafka简介 1.1 什么是kafka kafka是一个分布式.高吞吐量.高扩展性的消息队列系统.kafka最初是由Linkedin公司开发的,后来在2010年贡献给了Apache基金会,成为了 ...
- 【POJ - 2431】Expedition(优先队列)
Expedition 直接中文 Descriptions 一群奶牛抓起一辆卡车,冒险进入丛林深处的探险队.作为相当差的司机,不幸的是,奶牛设法跑过一块岩石并刺破卡车的油箱.卡车现在每运行一个单位的距离 ...
- 使用CXF实现WebService
一.首先创建一个maven项目,引入相应的jar包 <?xml version="1.0" encoding="UTF-8"?> <proje ...
- java中什么是继承笔记
继承 怎样实现继承:1,先提取共有的属性和方法,放到一个类里,这个叫父类.基类.超类 2.编写子类 修饰符 class 子类名 extends 父类名 好处:提高代码的复用性 子类怎么去 ...
- mui的app页面使用layui填充数据
在mui的开发中有个坑,mui.plusReady在web上使用时是不会起作用的,只能在app上才行,所以推荐自己测试时使用mui.ready去写加载时的方法. 前端请求的返回格式为json,所以在后 ...
- 基于 WPF 模块化架构下的本地化设计实践
背景描述 最近接到一个需求,就是要求我们的 WPF 客户端具备本地化功能,实现中英文多语言界面.刚开始接到这个需求,其实我内心是拒绝的的,但是没办法,需求是永无止境的.所以只能想办法解决这个问题. 首 ...
- 思科根据键值获取OID方法
一.打开思科网站官网 https://www.cisco.com/ 二.按下图路径选择 三.点击MIB Locator 四.选择"SNMP Object Navigator" 五. ...
- .net core 添加本地dll
公司内部开发的核心类库,添加到新项目中去,可以使用如下方法. 1.设置包信息 右击项目-属性,选着打包,输入相关信息. 2.核心类库打包成 *.nupkg文件, 3.创建一个文件夹.将打包的nupkg ...
- Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介(超详解)
简介 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏.从而达到一种“有图有真相”的效果. 截图方法 方法1 sav ...