题意:

在一条线上,有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 3441 Rotation

    总的来说,这题要2次用到polya定理. 由题目条件A*A=B*B+1,变形为(A-1)*(A+1)=K*B*B; 分别分解A-1和A+1的质因数,在合并在一起. 第一步:搜索B,对B*B的正方形涂色 ...

  2. java打印时间精确到毫秒

    package net.floodlightcontroller.conflict; import java.io.*; import java.util.*; import java.text.Si ...

  3. css中的:before与:after的简单使用

    直接上代码,不多说了! 画三角形 1). <style type="text/css"> .triangle{ width: 0; height: 0; /*borde ...

  4. CF 317D Game with Powers

    题解: 将一个数的指数看着一个堆,问题变成这些堆的异或值 分析一个堆的情况,打SG表. #include<stdio.h> #include<string.h> ]; char ...

  5. ADO,OLEDB,ODBC,DAO的区别

    ADO NET OLEDB ODBC连接数据库的区别 http://www.doc88.com/p-976312043296.html http://blog.csdn.net/ithomer/art ...

  6. SendMessage、PostMessage原理

    SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...

  7. Nim语言:Pascal的语法,Python的缩进

    http://nim-lang.org/ 德国人Andreas Rumpf的作品,原因是他对过去使用的每种语言都不满意(Pascal也不满意?).以前叫Nimrod语言,从0.96版本开始改名为Nim ...

  8. Spring使用外部的配置文件

    在使用Spring做web项目的时候,通常会使用到数据库的连接信息 jdbcUrl driverClass username password 那么应该如何使用这些属性呢? 如在Spring中使用数据 ...

  9. OSSEC配置文件ossec.conf中添加mysql服务

    配置路径:/opt/ossec/etc/ossec.conf <ossec_config>   <global>     <email_notification>y ...

  10. 12个目标跟踪方面的资料12 Tracking

    Goal Tracking Template - FEMA.gov Goal Tracking Template Set a weekly or biweekly deadline to report ...