【Uva 1632】Alibaba
【Link】:
【Description】
直线上有n(n≤10000)个点,其中第i个点的坐标是xi,且它会在di秒之后消失。Alibaba 可以从任意位置出发,求访问完所有点的最短时间。无解输出No solution。
恰好在di秒到的话,不算到
【Solution】
访问到点的时候,因为是秒取点的;
所以最后的答案肯定是一段区间;
按照之前区间动规的思路;
假设当前到了[l..r]这段区间的最左边/最右边;
然后枚举下一个要到哪里(l-1或r+1);
但是这样定义状态是不可行的;
因为要开一个1W*1W的数组;
于是我们按照区间的长度作为状态;
可以发现之前定义的状态;
可以按照区间的长度来递推;
可以发现都是从长度为l的区间递推到长度为l+1的区间
可以枚举一下区间的左端点,然后做一下顺推;
因为只从l递推到l+1;
则可以用滚动数组了;
只需定义f[2][1e4][2]即可;
第一维代表区间长度,(上一个长度和当前长度),第二维代表区间的左端点,第三维表示在这个区间的左端还是右端;
最后答案在f[n&1][1][0]和f[n&1][1][1]里面找即可;
刚好在b[i]的时候到达a[i]不算到达
【NumberOf WA】
1
【Reviw】
发现只是由前一个状态递推到后一个状态的话;
都能用滚动数组优化空间;
以后都把int定义为long long :)
【Code】
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e4;
const int INF = 0x3f3f3f3f;
int n,a[N+10],b[N+10],f[2][N+10][2];
main(){
//freopen("F:\\rush.txt","r",stdin);
while (~scanf("%lld",&n)){
for (int i = 1;i <= n;i++)
scanf("%lld%lld",&a[i],&b[i]);
for (int i = 1;i <= n;i++){
f[1][i][0] = f[1][i][1] = (b[i]>0?0:INF);
}
for (int i = 1;i <= n-1;i++){
int cur = i&1;
memset(f[cur^1],INF,sizeof f[cur^1]);
for (int j = 1;j <= n-i+1;j++){
if (f[cur][j][0]<INF){
// l = j,r = j+i-1,0
// l = j-1,r = j-1+i+1-1 = j+i-1
if (j >= 2){
f[cur^1][j-1][0] = min(f[cur^1][j-1][0],f[cur][j][0]+a[j]-a[j-1]);
if (f[cur^1][j-1][0]>=b[j-1])
f[cur^1][j-1][0] = INF;
}
//l = j,r = j+i+1-1 = j+i
if (j+i<=n){
f[cur^1][j][1] = min(f[cur^1][j][1],f[cur][j][0]+a[j+i]-a[j]);
if (f[cur^1][j][1] >= b[j+i])
f[cur^1][j][1] = INF;
}
}
if (f[cur][j][1]<INF){
// l = j,r = j+i-1,1
// l = j-1,r = j-1+i+1-1 = j+i-1
if (j >= 2){
f[cur^1][j-1][0] = min(f[cur^1][j-1][0],f[cur][j][1]+a[j+i-1]-a[j-1]);
if (f[cur^1][j-1][0]>=b[j-1])
f[cur^1][j-1][0] = INF;
}
//l = j,r = j+i+1-1 = j+i
if (j+i<=n){
f[cur^1][j][1] = min(f[cur^1][j][1],f[cur][j][1]+a[j+i]-a[j+i-1]);
if (f[cur^1][j][1] >= b[j+i])
f[cur^1][j][1] = INF;
}
}
}
}
int ans = min(f[n&1][1][0],f[n&1][1][1]);
if (ans>=INF)
puts("No solution");
else
printf("%lld\n",ans);
}
return 0;
}
【Uva 1632】Alibaba的更多相关文章
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 【UVa 116】Unidirectional TSP
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVa 1347】Tour
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【uva 1025】A Spy in the Metro
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【Uva 11584】Partitioning by Palindromes
[Link]:https://cn.vjudge.net/contest/170078#problem/G [Description] 给你若干个只由小写字母组成的字符串; 问你,这个字符串,最少能由 ...
- 【Uva 11400】Lighting System Design
[Link]: [Description] 你要构建一个供电系统; 给你n种灯泡来构建这么一个系统; 每种灯泡有4个参数 1.灯泡的工作电压 2.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的 ...
随机推荐
- 从Chrome源码看audio/video流媒体实现二(转)
第一篇主要介绍了Chrome加载音视频的缓冲控制机制和编解码基础,本篇将比较深入地介绍解码播放的过程.以Chromium 69版本做研究. 由于Chromium默认不能播放Mp4,所以需要需要改一下源 ...
- iOS开发——捕获崩溃信息
可通过注册NSUncaughtExceptionHandler捕获异常信息,将拿到的NSException细节写入Crash日志,精准的定位出错程序位置,有需要的,可直接将crash信息直接上传服务器 ...
- java 基于 bootstrap_datagrid 分页
1.首先引入datagrid js ,css $("#datagrid").bootstrap_datagrid({ url : "<%=path%>/us ...
- [LeetCode]Single Number 异或的妙用
1.数组中仅仅有一个元素仅仅出现一次,其余出现偶数次. 利用异或中同样元素相互抵消的方式求解. 2.数组中仅仅有2个元素仅仅出现一次.其余出现偶数次. class Solution { public: ...
- 在cmd命令行中弹出Windows对话框(使用mshta.exe命令)
有时候用bat写一些小脚本最后会弹出对话框提示操作成功,可以用mshta.exe来实现,它是Windows系统的相关程序,用来执行.HTA文件,一般计算机上面都有这个程序,实现如下: mshta vb ...
- 用Struts2搭建一个登录例子【本人亲测好用】
今天尝试struts2的搭建,遇到不少的问题,终于一一解决,逛了很多地方,最终完成搭建 1.首先要下载struts2的一些组件,我下载的是版本2.3.4.1,Eclipse是4.6版本的.由于版本的不 ...
- win10下虚拟机安装XP系统 后无网卡的解决
Windows 8提供了免费的虚拟机 Hyper-V, 但是在配置 Hyper-V虚拟机的时候经常遇到虚拟机无法上网,本文介绍的是: 原料 Windows 10 Hyper-V Windows X ...
- C2mini 摄像头添加 到 7832N 录像机方法
1.在YS7.com 把2个设备全部添加 (录像机也可以通过手机添加) 2.在录像机里添加摄像头 注: 如出现 “未知错误”可能为录像机版本过低造成.
- 开发板ping得通本地,但是不能上网
在3531D的开发板上面接入LAN7500的USB转以太网口,加载完驱动后. 然后开启eth1 查看一下ifconfig,发现没有ip,配置一下ip 直接ping本地发现可以ping得通,代表链路是连 ...
- 洛谷 P2614 计算器弹琴
P2614 计算器弹琴 题目描述 总所周知,计算器可以拿来干很多它本不应该干的事情,比如写作文.(参看洛谷P2549) 小A发现了一个计算器的另一个隐藏功能——弹琴. http://www.bilib ...