uva 1632 Alibaba
题意:
一个人要从如果干个地方拿货,每个地方的货物是有存在时间的,到了某个时间之后就会消失。
按照位置从左到右给出货物的位置以及生存时间,这个人选择一个最优的位置出发,问拿完货物的最少时间。
思路:
首先确定最优位置就是生存时间最少的货物的位置。
区间dp,dp[i][j][0]和dp[i][j][1]分别表示取完i到j这个区间的所有货物之后在左边和在右边的最少时间。
转移看具体代码。
min这个函数貌似非常耗时,t了5发define了一个mi就过了。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define mi(a,b) (a) >= (b) ? (b) : (a)
using namespace std;
const int N = 1e4 + ;
const int inf = 0x3f3f3f3f;
int dp[N][N][]; struct node
{
int p,d;
node(){};
node(int x,int y):p(x),d(y){};
}a[N];
int main()
{
int n;
while (scanf("%d",&n) == )
{
memset(dp,inf,sizeof(dp));
for (int i = ;i <= n;i++)
{
scanf("%d%d",&a[i].p,&a[i].d);
}
int k = ;
for (int i = ;i <= n;i++)
{
if (a[i].d < a[k].d)
{
k = i;
}
}
dp[k][k][] = dp[k][k][] = ;
for (int i = k;i >= ;i--)
{
for (int j = k;j <= n;j++)
{
if (i == j) continue;
int &x = dp[i][j][];
int &y = dp[i][j][];
x = mi(x,a[i+].p - a[i].p + dp[i+][j][]);
x = mi(x,a[j].p - a[i].p + dp[i+][j][]);
y = mi(a[j].p - a[j-].p + dp[i][j-][],y);
y = mi(y,a[j].p - a[i].p + dp[i][j-][]);
if (x >= a[i].d) x = inf;
if (y >= a[j].d) y = inf;
}
}
int ans = min(dp[][n][],dp[][n][]);
if (ans == inf) printf("No solution\n");
else printf("%d\n",ans);
}
return ;
}
/*
5
1 3 3 1 5 8
8 19 10 15
5 1 5 2 1 3 4 4 2 5 3
*/
uva 1632 Alibaba的更多相关文章
- UVA - 1632 Alibaba 区间dp
题意:给定n个点,其中第i个点的坐标是,且它会在秒后消失.Alibaba可以从任意位置出发,求访问完所有点的最短时间.无解输出No solution. 思路:表示访问完区间后停留在i点的最短时间,表示 ...
- UVA - 1632 Alibaba (区间dp+常数优化)
题目链接 设$dp[l][r][p]$为走完区间$[l,r]$,在端点$p$时所需的最短时间($p=0$代表在左端点,$p=1$代表在右端点) 根据题意显然有状态转移方程$\left\{\begin{ ...
- 【Uva 1632】Alibaba
[Link]: [Description] 直线上有n(n≤10000)个点,其中第i个点的坐标是xi,且它会在di秒之后消失.Alibaba 可以从任意位置出发,求访问完所有点的最短时间.无解输出N ...
- UVa 1632 阿里巴巴(区间DP)
https://vjudge.net/problem/UVA-1632 题意: 直线上有n个点,其中第i个点的坐标是xi,且它会在di秒之后消失.Alibaba可以从任意位置出发,求访问完所有点的最短 ...
- UVA - 10723 Alibaba (dp)
给你两个长度不超过30的字符串序列,让你找到一个最短的字符串,使得给定的两个字符串均是它的子序列(不一定连续),求出最短长度以及符合条件的解的个数. 定义状态(a,b,c)为当前字符串长度为a,其中包 ...
- ZOJ 3469 Food Delivery(区间DP)
https://vjudge.net/problem/ZOJ-3469 题意:在一条直线上有一个餐厅和n个订餐的人,每个人都有随时间上升的不满意值,从餐厅出发,计算出送完时最小的不满意值总和. 思路: ...
- 2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)
这场比赛可以说是灰常的水了,涨信心场?? 今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~ 之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小 ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
随机推荐
- redis使用rdb恢复数据
redis中存在rdb备份和aof备份两种方式. 如果在redis多个节点发生雪崩时,我们往往使用定期冷备rdb或者aof文件,去恢复数据的方式,但往往数据量较大时rdb恢复更加的快速,毕竟aof保存 ...
- tensorflow入门笔记(五) name_scope和variable_scope
一.上下文管理器(context manager) 上下文管理器是实现了上下文协议的对象,主要用于资源的获取与释放.上下文协议包括__enter__.__exit__,简单说就是,具备__enter_ ...
- 【python基础】利用pandas处理Excel数据
参考:https://www.cnblogs.com/liulinghua90/p/9935642.html 一.安装第三方库xlrd和pandas 1:pandas依赖处理Excel的xlrd模块, ...
- IntelliJ IDEA Ultimate 下载与安装
一.下载 Intellij IDEA Ultimate 下载链接:https://www.jetbrains.com/idea/download/#section=windows 1.进入官网点击Ul ...
- 一个ajax请求,接收json数据
<a id="inviterDel" onclick="delInviter(${item.inviterAddId})">删除</a> ...
- git push error:error: insufficient permission for adding an object to repository database ./object解决
在服务器代码库xxx.git文件夹中:1.sudo chmod -R g+ws *2.sudo chgrp -R mygroup * //mygroup是该文件夹的所有组3.git repo-conf ...
- vux icon
官网:https://doc.vux.li/zh-CN/components/icon.html <icon type="success"></icon>& ...
- [LeetCode] 884. Uncommon Words from Two Sentences_Easy tag: Hash Table
We are given two sentences A and B. (A sentence is a string of space separated words. Each word co ...
- .Net拾忆:从List去除重复-拾忆集合
方法1: private static List<int> DistinctList(List<int> list) {//去除重复 HashSet<int> ha ...
- asp.net拦截器
一 拦截器又称过滤器. asp.net mvc本身是自带3种拦截器:Action拦截器.Result拦截器.Exception拦截器. 应用中常见的拦截器有日志拦截器(Action拦截器)和异常处理拦 ...