题意:

在一条线上,有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的更多相关文章

  1. 【暑假】[深入动态规划]UVa 10618 Fixing the Great Wall

    UVa 10618 Fixing the Great Wall 题目:  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=361 ...

  2. UVA-1336 Fixing the Great Wall(区间DP)

    题目大意:长城(视作x正半轴)有n处破损.有一个智能修复机器人,它的初始位置和移动速度已知.每处破损处都有一组参数(x,c,d),x表示位置,c.d表示在时间t后再修复该处破损的花费为d*t+c.求用 ...

  3. 【杂题总汇】UVa-1336 Fixing the Great Wall

    [UVA-1336]Fixing the Great Wall 一开始把题看错了……直接用的整数存储答案:之后用double存最后输出答案的时候取整就AC了

  4. UVa 1336 Fixing the Great Wall (区间DP)

    题意:给定 n 个结点,表示要修复的点,然后机器人每秒以 v 的速度移动,初始位置在 x,然后修复结点时不花费时间,但是如果有的结点暂时没修复, 那么每秒它的费用都会增加 d,修复要花费 c,坐标是 ...

  5. uva1336 Fixing the Great Wall

    用到了kase避免memset超时 #include<cstdio> #include<cstring> #include<cmath> #include<a ...

  6. 【Uva 1336】Fixing the Great Wall

    [Link]: [Description] 给你长城上的n个修补点,然后你的位置为x; 你需要依次去这n个点,然后把它们全部修好. 但是修的前后顺序不一样的话,花费不一样. 如果立即把第i个点修好的话 ...

  7. [SinGuLaRiTy] 动态规划题目复习

    [SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metr ...

  8. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  9. [poj1113][Wall] (水平序+graham算法 求凸包)

    Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...

随机推荐

  1. hdu 4038 Stone

    思路: 如果负数的个数为偶数则不必改变,为奇数就将最大负数变为正: 对于正数,尽量将1,2变为3即可. 代码如下: #include<cstring> #include<iostre ...

  2. 2013 Multi-University Training Contest 2 Balls Rearrangement

    先算出lcm(a,b),如果lcm>=n,则直接暴力解决:否则分段,求出0-lcm内的+0-n%lcm内的值. 再就是连续相同的一起计算!! #include<iostream> # ...

  3. Thread的第一天学习

    1.实现线程的方法: 1)extend Thread 2)implements Runnable 2.下面代码执行哪个run方法: new Thread( new Runnable(){ public ...

  4. java里int和Integer什么区别

    Integer i=0; i是一个对象 int i=3; i是一个基础变量 Integer i=0; 这种写法如果没记错,在JAVA1.5之前是会报错的,自动的加解包是1.5的新特性 必须写成 Int ...

  5. 百度全新的ARM架构服务器,一个2U机箱装6台,每台4个3T硬盘,每个机箱共72TB

    1月11日,中国科学院原秘书长.国家科技重大专项国务院咨询评估组专家侯自强,来到百度南京数据中心,和他一起的还有中国工程院院士倪光南以及工业和信息化部电信研究院传输研究所副所长石友康等人.他们看到的是 ...

  6. Failed to execute goal.....webxml attribute is required...

    maven在打包项目的时候报错 Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-wa ...

  7. HDU5099——Comparison of Android versions(简单题)(2014上海邀请赛重现)

    Comparison of Android versionsProblem DescriptionAs an Android developer, itˇs really not easy to fi ...

  8. android rabbitMQ

    http://www.cnblogs.com/wufawei/archive/2012/03/31/2427823.html http://www.raywenderlich.com/5527/get ...

  9. Android开发之EditText属性详解

    1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 ( ...

  10. useradd和adduser的区别

    1. 在root权限下,useradd只是创建了一个用户名,如 (useradd  +用户名 ),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了 ...