我回来啦


试题描述

今天是万圣节,小L同学开始了一年一度的讨要糖果游戏,但是在刚刚过去的比赛中小有成就的他打算给自己增加一点难度:如果没有讨到每一家的糖果就算输。

已知小L共有n(n不大于10000)个邻居,他们都在同一条街上(可以近似看成一条直线),第i个邻居的坐标是xi。L同学的妈妈会在一开始把他送到任意邻居的门前。现在已知所有邻居会在di时间后休息(休息以后不能再去打扰),求访问完所有点的最短时间,如果无解输出“No solution”。

输入
输入第一行为一个正整数表示n,接下来n行,每行两个用空格隔开的数,分别表示第i个邻居的位置和休息时间。
输出
输出一个数,表示最短时间,无解输出“No solution”。
输入示例
5
1 3
3 1
5 8
8 19
10 15
输出示例
11

看起来是一个搜索或者dp

然鹅发现搜索会TLE

考虑dp:

为了转移我们存储的数据我们不能采用普通的区间dp

我们不难发现,为了遍历直线上的每一个点,其中一个端点一定是最后经过的点(自己可以推一下)

所以我们用dp[i][j][0]表示从i到j结束在左端点的最短时间

用dp[i][j][1]表示从i到j结束在右端点的最短时间

于是对于i到j+1的区间在合法范围内就有了两种选择:从i到j区间转移或者从i-1到j+1区间转移


但是发现空间开不下于是我们换一种存储方式

为了节省空间我们只存储区间起点(压缩一维存储区间长度奇数偶数)

于是我们又有了四种转移方式:

对于从i到j的区间,从i-1到j转移(两种)或者从i到j-1转移(两种)

关于转移:

对于区间dp来讲,无后效性体现在从一步到下一步的转移

所以转移的代价是从结束时间到下一个节点的距离

关于合法:主要就是时间不要超过

上代码

#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
int n,dp[][][],xx[],d[],nx;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d",&xx[i],&d[i]);
for(int i=;i<=n;i++)dp[][i][]=dp[][i][]=;
for(int i=;i<n;i++)
{
int x=nx;nx^=;
for(int j=;j<=n-i;j++)
{
dp[nx][j][]=min(dp[x][j+][]+xx[j+]-xx[j],dp[x][j+][]+xx[j+i]-xx[j]);
dp[nx][j][]=min(dp[x][j][]+xx[j+i]-xx[j],dp[x][j][]+xx[j+i]-xx[j+i-]);
if(dp[nx][j][]>d[j])dp[nx][j][]=INF;
if(dp[nx][j][]>d[i+j])dp[nx][j][]=INF;
}
}
int ans=min(dp[nx][][],dp[nx][][]);
if(ans>=INF)puts("No solution");
else printf("%d",ans);
return ;
}

2018.12.1 万圣节的小L的更多相关文章

  1. LRJ入门经典-0907万圣节的小L306

    原题 LRJ入门经典-0907万圣节的小L306 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天是万圣节,小L同学开始了 ...

  2. 微信小程序 - 接口更新记录以及解决方案(2018/12/26)

    2018/8/17 - 背景音频需要在app.json添加requireBackGroundModes 2018/9/12 - 微信更改获取用户信息接口/获取位置等接口 - button 2018/1 ...

  3. loli的测试-2018.12.9

    模拟赛-2018.12.9 这是NOIP之后第一次模拟赛...但是考的比较悲惨. 非常喜欢写考试总结,不知道为什么... T1:https://www.luogu.org/problemnew/sho ...

  4. ACM D的小L

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2   描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...

  5. nyoj-366-D的小L(求全排列)

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡 ...

  6. nyoj-----D的小L

    D的小L 时间限制:4000 ms  |           内存限制:65535 KB 难度:2   描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡 ...

  7. D的小L

    D的小L 描述  一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0<n<10),写出1 ...

  8. nyoj 366 D的小L (全排列)

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2   描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...

  9. nyoj 366-D的小L (next_permutation())

    366-D的小L 内存限制:64MB 时间限制:4000ms 特判: No 通过数:5 提交数:7 难度:2 题目描述:       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡 ...

随机推荐

  1. HDU 1027 以数列

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  2. Emgu-WPF学习使用-识别二维码的位置

    原文:Emgu-WPF学习使用-识别二维码的位置    参考链接:http://blog.csdn.net/gaobobo138968/article/details/47663607    我完全参 ...

  3. Emgu-WPF 激光雷达研究-移动物体跟踪2

    原文:Emgu-WPF 激光雷达研究-移动物体跟踪2 初步实现了去燥跟踪,并用圆点标注障碍物 https://blog.csdn.net/u013224722/article/details/8078 ...

  4. 百度官方wormHole后门检测记录

    乌云地址:http://drops.wooyun.org/papers/10061 后门端口:40310/6259 本次测试在Ubuntu下,具体adb调试工具参考 sink_cup的博客 http: ...

  5. 在asp.net 中web.config配置错误页

    每当用户访问错误页面时,会出现不友好的错误页面,所以为了防止这种不友好,我们在web.config中的<system.web>节点下配置 <customErrors>,在出现比 ...

  6. delphi Stomp客户端连接 RabbitMQ(1)

    最近公司想上个消息推送系统,网上搜了很多,因公司主要产品是Delphi,我选择了开源的RabbitMQ,Erlang语言开发,天生并行. 代码下载地址:delphistomp下载地址 windows上 ...

  7. [转] Protobuf高效结构化数据存储格式

    从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版本为libprotoc 3.2.0. 一.Protobuf? 1. 是什么?  Goo ...

  8. 判断一个窗口是否被挂起(发WM_NULL消息,或者调用IsHungAppWindow API进行测试)

    判断一个窗口是否被挂起了(就是没有响应了),在多窗口编程了经常会用到,在给别的窗口发消息前,为了目的窗口能确定收到消息,常常在之前先检测窗口是否被挂起了,我们以前常用的方式的是使用下面的方法: //  ...

  9. Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?

    原始链接:Introduction: Why Google C++ Testing Framework? 词汇表 版本号:v_0.1 介绍:为什么使用GTest? GTest帮助你写更好的C++测试代 ...

  10. 基于python实现的三方组件----Celery

    一.基于python实现的三方组件----Celery 1.作用 用于异步周期任务的处理 2.Celery的组成 (1)任务 app (2)记录任务的缓存(通常用redis或rabbitMQ) 任务记 ...