1258 关路灯

 时间限制: 1
s
 空间限制:
128000 KB
 题目等级 :
大师 Master

查看运行结果

题目描述 Description

多瑞卡得到了一份有趣而高薪的工作。每天早晨他必须关掉他所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。

多瑞卡每晚到早晨5点钟都在晚会上,然后他开始关灯。开始时,他站在某一盏路灯的旁边。

每盏灯都有一个给定功率的电灯泡,因为多端卡有着自觉的节能意识,他希望在耗能总数最少的情况下将所有的灯关掉。

多端卡因为太累了,所以只能以1m/s的速度行走。关灯不需要花费额外的时间,因为当他通过时就能将灯关掉。

编写程序,计算在给定路灯设置,灯泡功率以及多端卡的起始位置的情况下关掉所有的灯需耗费的最小能量。

输入描述 Input
Description

输入文件的第一行包含一个整数N,2≤N≤1000,表示该村庄路灯的数量。

第二行包含一个整数V,1≤V≤N,表示多瑞卡开始关灯的路灯号码。

接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每盏灯的参数,其中0≤D≤1000,0≤W≤1000。D表示该路灯与村庄开始处的距离(用米为单位来表示),W表示灯泡的功率,即在每秒种该灯泡所消耗的能量数。路灯是按顺序给定的。

输出描述 Output
Description

输出文件的第一行即唯一的一行应包含一个整数,即消耗能量之和的最小值。注意结果小超过1,000,000,000。

样例输入 Sample
Input

4

3

2 2

5 8

6 1

8 7

样例输出 Sample
Output

56

数据范围及提示 Data Size &
Hint

分类标签 Tags 点此展开

分析:

我们发现关掉的路灯一定是连续的    YY易得(=
=假装有证明)

然后就想到“
 dp[i][j]表示i~j都关掉需要的能源

接着转移  转移很蛋疼(或许是我太弱)

首先想到dp[i][j]从dp[i+1][j]或者dp[i][j-1]转移过来  这时发现问题了
 如果不加限制

理论上会出现(以样例为例) dp[4][4]这样不合法的状态  而起点在3

那么限制一下端点也很容易搞定

还是有问题= =  这题我写的递归  就会递归出
 在求解dp[2][4]时 从dp[3][4]转移过来

也就是说这一步是在4号灯关了的情况下从3走到2  这样对于解的值不好计算
 于是想到加一个半维

此时dp[i][j][0]表示最后一步落在i  dp[i][j][1]表示最后一步落在j

到这里转移基本上很明了了  还有个问题在于转移时对增加的能耗的处理

= =一开始我很傻  写了个函数用O(n)去算转移时每一秒要耗的能源值

其实这个东西用一个sum[i][j]表示i~j的和就很容易了(况且关了灯的区间又是连续的)

自己的代码:

代码:
#include< cstdio >
#include< iostream >
#include< cstdlib >
#include< cstring >
long long int f[1001][1001][2],sum[1001]={0};
long long int n,d,w,x[1001],v;
using namespace std;
void input()
{
scanf("%d%d",&n,&v);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&d,&w);//d juli w gong lv
sum[i]=sum[i-1]+w;//sum表示前i个灯的功率和,好计算除了区间之外的其他点的消费 
x[i]=d;
}
}

int main()
{
input();
memset(f,0x3f3f3f3f,sizeof(f));//3维数组赋值最大,赋值0x4个3f,二维数组赋值0x7加7个f。 
f[v][v][0]=f[v][v][1]=0;//f[i][j][0]表示熄灭i-j区间的灯的花费且站在i点,f[i][j][1]表示站在j点 
for(int j=v;j<=n;++j)//j从v到最终 
 for(int
i=j-1;i>=1;--i)//i从j-1到1,第一次循环用到f[j][j][1||0],之后第一维的数一直减小,用之前更新过的来更新它(这是倒序的原因) 
 {
 
f[i][j][0]=min(f[i+1][j][0]+(sum[i]+sum[n]-sum[j])*abs(x[i]-x[i+1]),f[i+1][j][1]+(sum[i]+sum[n]-sum[j])*abs(x[i]-x[j]));
 
f[i][j][1]=min(f[i][j-1][1]+(sum[i-1]+sum[n]-sum[j-1])*abs(x[j-1]-x[j]),f[i][j-1][0]+(sum[i-1]+sum[n]-sum[j-1])*abs(x[i]-x[j]));
 }
printf("%d\n",min(f[1][n][0],f[1][n][1]));
return 0;
}

109.关路灯(区间dp)的更多相关文章

  1. P1220 关路灯 区间dp

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  2. P1220 关路灯——区间dp

    P1220 关路灯 题目描述 某一村庄在一条路线上安装了 \(n\) 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一 ...

  3. 洛谷 P1220 关路灯 区间DP

    题目描述 某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了 ...

  4. 洛谷P1220关路灯——区间DP

    题目:https://www.luogu.org/problemnew/show/P1220 区间DP. 代码如下: #include<iostream> #include<cstd ...

  5. luogu1220_关路灯 区间dp

    传送门 区间dp f[i][j][state] : [i, j]区间 state=0 当前选i state = 1 当前选j 注意枚举的顺序 转移的设计时 在同时刻不在[i,j]区间里的数也要考虑 不 ...

  6. 洛谷P1220关路灯[区间DP]

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  7. 洛谷P1220关路灯[区间DP 提前计算代价]

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  8. luogu 1220 关路灯 区间dp

    Code: #include <bits/stdc++.h> #define ll long long #define N 1003 #define setIO(s) freopen(s& ...

  9. [luoguP1220] 关路灯(DP)

    传送门 如果去关某一个灯,那么途中经过的灯都能关闭,那么就是连续一段区间,区间DP. f[i][j][0] 表示关完 i, j 这个区间且在 i 这个位置 f[i][j][1] 表示关完 i, j 这 ...

随机推荐

  1. Install the Active Directory Administration Tools on Windows Server

    安装 Active Directory 管理工具 To manage your directory from an EC2 Windows instance, you need to install ...

  2. 前端部署: nginx配置

    前提:nginx 已安装 简介:nginx(engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ram ...

  3. ios 全方位修改工程名

    本文针对于彻底修改iOS工程名,不需要另外建工程,会整理的跟新工程完全一样 1. 选中旧工程名,改为新的 然后选择rename 2. 依次选择黄色文件夹,修改名字,千万不要在Xcode外修改!!! 修 ...

  4. [洛谷P2420] 让我们异或吧

    题目链接:让我们异或吧 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是 ...

  5. 【BZOJ4657】tower [网络流]

    炮塔 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output 一行一个整数表示答案. Sample Input 4 5 0 ...

  6. [bzoj2049][Sdoi2008]Cave 洞穴勘测——lct

    Brief Description 给定一个森林,您需要支持两种操作: 链接两个节点. 断开两个节点之间的链接. Algorithm Design 对于树上的操作,我们现在已经有了树链剖分可以处理这些 ...

  7. bzoj 1433 二分图匹配

    裸地匈牙利或者最大流,直接匹配就行了 需要注意的是(我就没注意细节WA了好多次...) 每个人和自己之间的边是0,但是应该是1 不是在校生是没有床的.... /******************** ...

  8. windows支持applocker的版本

    Operating system requirements   The following table show the on which operating systems AppLocker fe ...

  9. algorithm ch6 priority queque

    堆数据结构的一个重要用处就是:最为高效的优先级队列.优先级队列分为最大优先级队列和最小优先级队列,其中最大优先级队列的一个应用实在一台分时计算机上进行作业的调度.当用堆来实现优先级队列时,需要在队中的 ...

  10. Linux : select()详解 和 实现原理【转】

    转自:http://blog.csdn.net/huntinux/article/details/39289317 原文:http://blog.csdn.net/boboiask/article/d ...