LRJ入门经典-0907万圣节的小L306
原题
| LRJ入门经典-0907万圣节的小L306 |
| 难度级别:B; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B |
|
试题描述
|
|
今天是万圣节,小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
|
分析1
当一看到“(n不大于10000)”时,就大约知道这是一道动态规划了。
再一看到“(可以近似看成一条直线)”时,就大概知道这是一道区间DP。
一切的一切都在说明一件事:读题很重要(语文很重要)。
状态:
dp[i][j][0]:将第i~j户邻居的糖果在他们休息之前全部要到,并在最后停在左边的最短时间。
dp[i][j][1]:将第i~j户邻居的糖果在他们休息之前全部要到,并在最后停在右边的最短时间。
转移方程:
这个可能有点难:
x=dp[i][j-1][1]+a[j]-a[j-1];
y=dp[i][j-1][0]+a[j]-a[i];
if(x>b[j]) x=INF;
if(y>b[j]) y=INF;
dp[i][j][1]=min(dp[i][j][1],min(x,y));
x=dp[i][j-1][0]+a[j]-a[j-1];
y=dp[i][j-1][1]+a[j]-a[i];
if(x>b[j]) x=INF;
if(y>b[j]) y=INF;
dp[i][j][0]=min(dp[i][j][0],min(x,y));
答案:
很显然是min(dp[1][n][0],dp[1][n][1])。
代码1
先上一段错误的代码:
分析2
显然上段代码的dp数组开不下了!
不要慌!
冷静思考!
首先想解决办法:
1、(谁都能想到)压缩数组
2、(这个有点儿难)用滚动数组
将dp[i][j][k]的i压缩成2
直接上代码!
代码2
#include<iostream>
#include<cstring>
#include<algorithm>
#define INF 1073741824
using namespace std;
int dp[2][10001][2],n;
int a[10001],b[10001];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
for(int i=1;i<=n;i++) dp[0][i][0]=dp[1][i][1]=0;
for(int k=1;k<n;k++)
{
for(int i=1;i+k<=n;i++)
{
int j=i+k,x,y;
int I=(i%2)^1;
dp[i%2][j][0]=dp[i%2][j][1]=INF;
x=dp[i%2][j-1][1]+a[j]-a[j-1];y=dp[i%2][j-1][0]+a[j]-a[i];
if(x>b[j]) x=INF;
if(y>b[j]) y=INF;
dp[i%2][j][1]=min(dp[i%2][j][1],min(x,y));
//cout<<"i:"<<i<<" j:"<<j<<" o:1"<<" x:"<<x<<" y:"<<y<<" dp:"<<dp[i%2][j][1]<<endl;
x=dp[I][j][0]+a[i+1]-a[i];y=dp[I][j][1]+a[j]-a[i];
if(x>b[i]) x=INF;
if(y>b[i]) y=INF;
dp[i%2][j][0]=min(dp[i%2][j][0],min(x,y));
//cout<<"i:"<<i<<" j:"<<j<<" o:0"<<" x:"<<x<<" y:"<<y<<" dp:"<<dp[i%2][j][0]<<endl<<endl;
}
}
if(min(dp[1][n][0],dp[1][n][1])==INF) cout<<"No solution";
else cout<<min(dp[1][n][0],dp[1][n][1]);
return 0;
}
LRJ入门经典-0907万圣节的小L306的更多相关文章
- LRJ入门经典-0905邮票和信封305
原题 LRJ入门经典-0905邮票和信封305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 假定一张信封最多贴5张邮票,如 ...
- LRJ入门经典-0906最短公共父串305
原题 LRJ入门经典-0906最短公共父串305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定字符串A和字符串B,要求 ...
- LRJ入门经典-0903切蛋糕305
原题 LRJ入门经典-0903切蛋糕305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 如图所示有一个矩形蛋糕,上面划分成 ...
- C++语言学习——LRJ入门经典笔记
1.scanf的输入格式,空格.TAB和回车符都是无关紧要,所以按Enter键并不意味着输入结束. 告诉程序输入结束的方式: 在windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- [转][RabbitMQ+Python入门经典] 兔子和兔子窝
[转][RabbitMQ+Python入门经典] 兔子和兔子窝 http://blog.csdn.net/linvo/article/details/5750987 RabbitMQ作为一个工业级的消 ...
- 【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等
[推荐图书]+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等 3赞 发表于 2016/7/4 21:14:12 阅读(1921) 评论(3) 初次接触FPGA,到 ...
随机推荐
- SqlServer 错误日志切换和查看
Sql Server 日志 和 代理错误日一般在实例重新启动后自己主动切换,假设实例久未重新启动,将可能积累太多的日志,不方便查看. 查看错误日志大小: --查看日志大小 EXEC xp_enumer ...
- hdu_1754,线段树单点更新,求区间最值
http://www.notonlysuccess.com/index.php/segment-tree-complete/ #include<iostream> #include< ...
- 如何将网站升级为HTTPS协议(整理)
如何将网站升级为HTTPS协议(整理) 一.总结 一句话总结: 获取证书(有免费有付费):证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,要从经销商购买. 安装证书:证书可以放在/etc ...
- sklearn.preprocessing OneHotEncoder——仅仅是数值型字段才可以,如果是字符类型字段则不能直接搞定
>>> from sklearn.preprocessing import OneHotEncoder >>> enc = OneHotEncoder() > ...
- SSL 延迟与 Http、Https
SSL延迟有多大? 1. 基本概念 ssl 协议由网景公司(Netscape)设计,由此网络链接从 http 逐步走向更为安全的 https 加密链接模式. HTTPs 链接和 HTTP 链接都建立在 ...
- 怎么去除innerHTML获得内容中的标签?
去掉innerHTML获得内容里面的标签: <body> <div id="d1"><p id="p1">hello wor ...
- canvas为什么你指定一个比较小的宽高,但它实际占位却很多?
ccanvas默认的宽高占位是:300*150 px 所以当你画一个普通的举行,你指定的宽高小于默认宽高的时候,通过审查元素发现周围都是空白的.
- benchmark测试PostgreSQL数据库OLTP性能
1,安装配置PostgreSQL数据库 2,下载地址:http://sourceforge.net/projects/benchmarksql/?source=navbar Required:JDK7 ...
- C#中使用Dictionary实现Map数据结构——VC编程网
转载自: http://blog.51cto.com/psnx168 在VC中使用过CMap以及在Java中使用过Map的朋友应该很熟悉,使用Map可以方便实现基于键值对数据的处理,在C#中,你就需要 ...
- 洛谷2850 【Usaco2006 Dec】虫洞Wormholes SPFA
问题描述 John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N (从1..N ...