Fixing the Great Wall
题意:
在一条线上,有n个坏的地方要修机器人修,机器人的移动速度V,若坏的地方立即被修花费ci,若没修,每单位时间增加d,出去机器人的开始位置,求修完n个地方的最小花费。
分析:
非常经典,求解“未来费用”的问题,考虑区间完成最后一定在区间边界上,才能保证最优。dp[i][j][k]表示修完区间长i起点为j的所有地点,k=0最后点在左边界,k=1最后点在右边界,花费最小的费用。现在考虑随着时间的花费增加的费用。时间*未走过的点的d之和为增加的费用。
dp[i][j][0]=min(dp[i-1][j+1][0]+费用,dp[i-1][j+1][1]+费用);
dp[i][j][1]=min(dp[i-1][j][0]+费用,dp[i-1][j][1]+费用);
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const double INF=1e22;
const int mod = ;
struct node{
int x,d,c;
}s[];
int sum[],sx,n;
double v;
double dp[][][];
bool cmp(node a,node b){
return a.x<b.x;
}
void solve(){
sum[]=;
for(int i=;i<=n;++i)
sum[i]=sum[i-]+s[i].d;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
{
dp[i][j][]=dp[i][j][]=INF;
}
for(int i=;i<=n;++i)
dp[][i][]=dp[][i][]=sum[n]*(abs(sx-s[i].x)/v)+s[i].c;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j){
int k=j+i-;
if(k>n)break;
dp[i][j][]=min(dp[i-][j+][]+((s[j+].x-s[j].x)/v)*(sum[j]+sum[n]-sum[k])+s[j].c,
dp[i-][j+][]+((s[k].x-s[j].x)/v)*(sum[j]+sum[n]-sum[k])+s[j].c);
dp[i][j][]=min(dp[i-][j][]+((s[k].x-s[j].x)/v)*(sum[j-]+sum[n]-sum[k-])+s[k].c,
dp[i-][j][]+((s[k].x-s[k-].x)/v)*(sum[j-]+sum[n]-sum[k-])+s[k].c);
}
printf("%.0lf\n",floor(min(dp[n][][],dp[n][][])));
}
int main()
{
while(~scanf("%d%lf%d",&n,&v,&sx)){
if(n==&&v==&&sx==)break;
for(int i=;i<=n;++i)
scanf("%d%d%d",&s[i].x,&s[i].c,&s[i].d);
sort(s+,s+n+,cmp);
solve();
}
return ;
}
Fixing the Great Wall的更多相关文章
- 【暑假】[深入动态规划]UVa 10618 Fixing the Great Wall
UVa 10618 Fixing the Great Wall 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=361 ...
- UVA-1336 Fixing the Great Wall(区间DP)
题目大意:长城(视作x正半轴)有n处破损.有一个智能修复机器人,它的初始位置和移动速度已知.每处破损处都有一组参数(x,c,d),x表示位置,c.d表示在时间t后再修复该处破损的花费为d*t+c.求用 ...
- 【杂题总汇】UVa-1336 Fixing the Great Wall
[UVA-1336]Fixing the Great Wall 一开始把题看错了……直接用的整数存储答案:之后用double存最后输出答案的时候取整就AC了
- UVa 1336 Fixing the Great Wall (区间DP)
题意:给定 n 个结点,表示要修复的点,然后机器人每秒以 v 的速度移动,初始位置在 x,然后修复结点时不花费时间,但是如果有的结点暂时没修复, 那么每秒它的费用都会增加 d,修复要花费 c,坐标是 ...
- uva1336 Fixing the Great Wall
用到了kase避免memset超时 #include<cstdio> #include<cstring> #include<cmath> #include<a ...
- 【Uva 1336】Fixing the Great Wall
[Link]: [Description] 给你长城上的n个修补点,然后你的位置为x; 你需要依次去这n个点,然后把它们全部修好. 但是修的前后顺序不一样的话,花费不一样. 如果立即把第i个点修好的话 ...
- [SinGuLaRiTy] 动态规划题目复习
[SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metr ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- [poj1113][Wall] (水平序+graham算法 求凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...
随机推荐
- 关于dynamic_cast
http://www.groad.net/bbs/read.php?tid-5476.html dynamic_cast 进行运行时强制转换.如果在执行时转换非法,则会转换失败.dynamic_cas ...
- Meteor 简介
简介 先来活动一下大脑.假设你坐在电脑面前,在两个窗口中打开同一个文件夹. 在其中一个窗口中删除一个文件,另一个窗口中的这个文件会消失吗? 不用实际操作你也知道肯定会消失的.在本地文件系统中的操作,不 ...
- Windows JDK环境变量的配置
下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装 计算机-->属性-->高级系统设置- ...
- lintcode :最小路径和
题目: 最小路径和 给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径. 样例 注意 你在同一时间只能向下或者向右移动一步 解题: 这个和求三角形的最小路径的差不多 ...
- lintcode :二叉树的最大深度
题目: 二叉树的最大深度 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最大深度为3. 解 ...
- 汉诺塔算法的递归与非递归的C以及C++源代码
汉诺塔(又称河内塔)问题其实是印度的一个古老的传说. 开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一 个小, ...
- WCF入门(六)---主机WCF服务
建立一个WCF服务后,下一步就是托管它,以便客户端应用程序可以使用,这就是所谓的WCF服务托管. WCF服务可以通过使用任何的四种方法如下托管. IIS主机 - IIS是Internet信息服务的缩写 ...
- 对原生态jdbc程序中问题总结
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- 224. Basic Calculator
题目: Implement a basic calculator to evaluate a simple expression string. The expression string may c ...
- 使用phantomjs对页面进行截图
本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及 phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 ph ...