UVA - 1632 Alibaba 区间dp
题意:给定n个点,其中第i个点的坐标是,且它会在秒后消失。Alibaba可以从任意位置出发,求访问完所有点的最短时间。无解输出No solution。
思路:表示访问完区间后停留在i点的最短时间,表示访问完区间后停留在j点的最短时间。转移方程如下:
dp[i][j][0] = min(dp[i+1][j][0]+dis[i+1]-dis[i], dp[i+1][j][1]+dis[j]-dis[i]);
dp[i][j][1] = min(dp[i][j-1][0]+dis[j]-dis[i], dp[i][j-1][1]+dis[j]-dis[j-1]);
AC代码
#include <cstdio>
#include <cmath>
#include <cctype>
#include <bitset>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 1e4 + 5;
int dp[maxn][maxn][2]; //0-stop at i 1-stop at j
int dis[maxn], dead[maxn];
int main() {
int n;
while(scanf("%d", &n) == 1) {
for(int i = 0; i < n; ++i) {
scanf("%d%d", &dis[i], &dead[i]);
}
memset(dp, 0, sizeof(dp));
for(int i = n-1; i >= 0; --i)
for(int j = i+1; j < n; ++j) {
dp[i][j][0] = min(dp[i+1][j][0]+dis[i+1]-dis[i], dp[i+1][j][1]+dis[j]-dis[i]);
if(dp[i][j][0] >= dead[i]) dp[i][j][0] = inf;
dp[i][j][1] = min(dp[i][j-1][0]+dis[j]-dis[i], dp[i][j-1][1]+dis[j]-dis[j-1]);
if(dp[i][j][1] >= dead[j]) dp[i][j][1] = inf;
}
int res = min(dp[0][n-1][0], dp[0][n-1][1]);
if(res == inf) printf("No solution\n");
else printf("%d\n", res);
}
return 0;
}
如有不当之处欢迎指出!
UVA - 1632 Alibaba 区间dp的更多相关文章
- UVA - 1632 Alibaba (区间dp+常数优化)
题目链接 设$dp[l][r][p]$为走完区间$[l,r]$,在端点$p$时所需的最短时间($p=0$代表在左端点,$p=1$代表在右端点) 根据题意显然有状态转移方程$\left\{\begin{ ...
- hdu 4597 + uva 10891(一类区间dp)
题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...
- uva 1632 Alibaba
题意: 一个人要从如果干个地方拿货,每个地方的货物是有存在时间的,到了某个时间之后就会消失. 按照位置从左到右给出货物的位置以及生存时间,这个人选择一个最优的位置出发,问拿完货物的最少时间. 思路: ...
- UVA 10559 Blocks——区间dp
题目:https://www.luogu.org/problemnew/show/UVA10559 应该想到区间dp.但怎么设计状态? 因为连续的东西有分值,所以应该记录一下连续的有多少个. 只要记录 ...
- UVA 10559 Blocks —— 区间DP
题目:https://www.luogu.org/problemnew/show/UVA10559 区间DP,有点难想: 为了方便,先把原来就是连续一段相同颜色的点看做一个点,记一下长度: f[i][ ...
- UVA 10559 Blocks(区间DP&&递推)
题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l ...
- UVa 1630 Folding (区间DP)
题意:折叠一个字符串,使得其成为一个尽量短的字符串 例如AAAAAA变成6(A) 而且这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYESYES 会变成 2(N5( ...
- UVa 1632 阿里巴巴(区间DP)
https://vjudge.net/problem/UVA-1632 题意: 直线上有n个点,其中第i个点的坐标是xi,且它会在di秒之后消失.Alibaba可以从任意位置出发,求访问完所有点的最短 ...
- BZOJ 1260&UVa 4394 区间DP
题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...
随机推荐
- MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用
JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...
- Storm容错和高可用
Daemon Fault Tolerance Storm有一些不同的守护进程 Nimbus负责调度workers supervisors负责运行和杀死workers log views负责访问日志 U ...
- Mysql基本命令一
一.清除mysql表中数据 delete from 表名;truncate table 表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...
- Object对象和function对象
Obejct对象 1.ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似. 2.ECMAScript中的所有对象都由Object对象继承而来,Ob ...
- 对List中每个对象元素按时间顺序排序
需求: 需要对List中的每个User按照birthday顺序排序,时间由小到大排列. 代码实现: import java.text.SimpleDateFormat; import java.uti ...
- python中的线程之semaphore信号量
semaphore是一个内置的计数器 每当调用acquire()时,内置计数器-1 每当调用release()时,内置计数器+1 计数器不能小于0,当计数器为0时,acquire()将阻塞线程直到其他 ...
- python字符串常用内置方法
python字符串常用内置方法 定义: 字符串是一个有序的字符的集合,用与存储和表示基本的文本信息. python中引号中间包含的就是字符串. # s1='hello world' # s2=&quo ...
- ABP官方文档翻译 6.1.1 MVC控制器
ASP.NET MVC控制器 介绍 AbpController基类 本地化 其他 过滤器 异常处理和结果包装 审计日志 验证 授权 工作单元 介绍 ABP通过Abp.Web.Mvc nuget包集成到 ...
- Hadoop学习笔记三
一.设置HDFS不进行权限检查 默认的HDFS上的文件类似于Linux中的文件,是有权限的.例如test用户创建的文件,root用户如果没有写权限,则不能进行删除. 有2种办法进行修改,修改文件的权限 ...
- BZOJ 2064: 分裂 [DP 状压 转化]
传送门 题意:一开始$n$块面积最后$m$块面积,面积和相等每次可以分裂或者合并,问最少几次 昨天忘发了... 不会.... 考虑最差情况,$n+m-2$所有先合并再分裂 发现只有当前后两个子集相等时 ...