【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. Nginx的日志备份操作

         正常情况下,我们给一个日志文件做备份.通常会 mv access.log access.log.0313 ,之后创建一个新的 touch access.log  会认为是备份完成了:旧的日志 ...

  2. TP5 模板渲染语法

    每次都要去网上找,又发现都不全.所以自己记录一下 volist:循环 {volist name="collection" id="v"} {/volist} i ...

  3. dd---复制文件并对原文件的内容进行转换和格式化处理

    dd命令用于复制文件并对原文件的内容进行转换和格式化处理.dd命令功能很强大的,对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果.用的比较多的还是用dd来备份裸设备.但是不推荐,如果需要 ...

  4. 人在IT,关于计算机专业的杂谈PPT

  5. iOS-入门HelloWorld

    刚刚搞了几个图形界面的iOS应用程序,难的没搞定一个,HelloWorld程序倒是很简单. 新建Project,iOS->Application->Single View Applicat ...

  6. 【Educational Codeforces Round 37 F】SUM and REPLACE

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 那个D函数它的下降速度是很快的. 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数 ...

  7. 洛谷—— P1877 [HAOI2012]音量调节

    https://www.luogu.org/problem/show?pid=1877#sub 题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要 ...

  8. 【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理

    敌方飞机应该不定时的出现,有自己的生命周期.运动轨迹.这个类用来管理敌机的产生.移动.爆炸.销毁等. 敌机管理类主要函数例如以下 //绑定控制器(更新分数) void bindController(C ...

  9. How to search Installed Updates

    Windows本身的控制面板中自带的搜索,无法根据补丁编号进行搜索 可以将补丁信息导出到文本,再用文本编辑器进行查找 https://www.concurrency.com/blog/w/search ...

  10. 智课雅思词汇---七、cur是什么意思

    智课雅思词汇---七.cur是什么意思 一.总结 一句话总结:词根:cur, curs ( cor, cour, cours, coars) = to run 1.cub是什么意思? 词根:cumb, ...