【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的更多相关文章

  1. 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵

    偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...

  2. 【贪心+中位数】【UVa 11300】 分金币

    (解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...

  3. 【UVa 10881】Piotr's Ants

    Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...

  4. 【UVa 116】Unidirectional TSP

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  5. 【UVa 1347】Tour

    [Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  6. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. 【uva 1025】A Spy in the Metro

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  8. 【Uva 11584】Partitioning by Palindromes

    [Link]:https://cn.vjudge.net/contest/170078#problem/G [Description] 给你若干个只由小写字母组成的字符串; 问你,这个字符串,最少能由 ...

  9. 【Uva 11400】Lighting System Design

    [Link]: [Description] 你要构建一个供电系统; 给你n种灯泡来构建这么一个系统; 每种灯泡有4个参数 1.灯泡的工作电压 2.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的 ...

随机推荐

  1. Git 内部原理 - (7)维护与数据恢复 (8) 环境变量 (9)总结

    维护与数据恢复 有的时候,你需要对仓库进行清理 - 使它的结构变得更紧凑,或是对导入的仓库进行清理,或是恢复丢失的内容. 这个小节将会介绍这些情况中的一部分. 维护 Git 会不定时地自动运行一个叫做 ...

  2. Git 内部原理 - (1)底层命令和高层命令 (2Git 对象

    文章摘选自git官网,这里复制下来表示我已阅读并学习过一次这些内容: 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理和实现方式. 我们发现学习 ...

  3. js001 ---- async

    Node.js异步流,详细见https://caolan.github.io/async/docs.html#parallel 1, async 用的比较多的是 waterfall, 瀑布流, 就是每 ...

  4. Python中的引用计数法

    目录 引用计数法 增量操作 计数器溢出的问题 减量操作 终结器 插入计数处理 引用计数法 增量操作 如果对象的引用数量增加,就在该对象的计数器上进行增量操作.在实际中它是由宏Py_INCREF() 执 ...

  5. PHP实时生成并下载超大数据量的EXCEL文件

    最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况.而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成 ...

  6. 玩具(toy)

    题目 试题2:玩具(toy) 源代码:toy.cpp 输入文件:toy.in 输出文件:toy.out 时间限制:1s 空间限制:256MB 题目描述 商店正在出售小C最喜欢的系列玩具,在接下来的n周 ...

  7. python里面 __future__的作用 & 下划线的作用 & 3.0实现不换行

    参考这篇文章: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820 ...

  8. 【Facebook的UI开发框架React入门之九】button简单介绍(iOS平台)-goodmao

    --------------------------------------------------------------------------------------------------- ...

  9. HDU 2444 The Accomodation of Students 二分图判定+最大匹配

    题目来源:HDU 2444 The Accomodation of Students 题意:n个人能否够分成2组 每组的人不能相互认识 就是二分图判定 能够分成2组 每组选一个2个人认识能够去一个双人 ...

  10. 2015北京网络赛 J Scores bitset+分块

    2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...