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? 如果有的话,输出字典序最小的路径 ...
随机推荐
- 洛谷P4198 楼房重建 单调栈+线段树
正解:单调栈+线段树 解题报告: 传送门! 首先考虑不修改的话就是个单调栈板子题昂,这个就是 然后这题的话,,,我怎么记得之前考试好像有次考到了类似的题目昂,,,?反正我总觉着这方法似曾相识的样子,, ...
- 【Python爬虫】BeautifulSoup网页解析库
BeautifulSoup 网页解析库 阅读目录 初识Beautiful Soup Beautiful Soup库的4种解析器 Beautiful Soup类的基本元素 基本使用 标签选择器 节点操作 ...
- git的配置操作
git配置信息 一.配置git config git config user.name 'yourName' git config user.name 'yourEmail@gmail.com' 二. ...
- 前端 HTML 常用标签 head标签相关内容 title标签 网页的标题信息
title标签 <title>标签:在<title>和</title>标签之间的文字内容是网页的标题信息,它会显示在浏览器标签页的标题栏中. 可以把它看成是一个网页 ...
- GUI库之Tkinter组件(二)
一.Lable组件 Lable组件是用于在界面上输出描述的标签: 1.举个例子. # Lable组件 from tkinter import * root = Tk() root.title(&quo ...
- shell脚本编写实例
实际案例 1.判断接收参数个数大于1 [ $# -lt 1 ] && echo "至少需要一个参数" && { echo "我要退出了.. ...
- 网络传输--UDP
UDP网络编程 一.优缺点 二.套接字socket 三.类型转换 四.UDP发收数据 五.广播和聊天器案例 回到顶部 一.优缺点 UDP : 无连接 (发送端无需确认接收端是否收到), 其主要用途为音 ...
- 发现Boost官方文档的一处错误(numpy的ndarray)
文档位置:https://www.boost.org/doc/libs/1_65_1/libs/python/doc/html/numpy/tutorial/ndarray.html shape在这里 ...
- Response实例
Response部分方法介绍及实例 客户端浏览器每访问一次web服务器的页面都会提交一次请求,与request对象对应的是response对象,该对象可以用来对客户的请求做出响应,向客户端发送数据.输 ...
- 项目发布脚本-nodejs
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...