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. ext4文件系统由文件的inode号定位其inode Table

    在ubuntu中(以16.06为例),stat filename 可以查看文件的inode数值,但是如何确定该inode项具体在哪个块组下的inode Table中不是那么容易,接下来通过一步步计算来 ...

  2. C#与数据库的连接的三种方式

    学习了.net的知识从C#一直到MVC,我一直觉得基础很重要,最近有复习一下数据库连接的三种方式 1 返回结果集的一张表 public static DataTable ExecuteDataTabl ...

  3. spring boot修改内置容器tomcat的服务端口

    方式一 在spring boot的web 工程中,可以使用内置的web container.有时需要修改服务端口,可以通过配置类和@Configuration注解来完成. // MyConfigura ...

  4. COGS727 [网络流24题] 太空飞行计划

    [问题描述] W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪 ...

  5. 【洛谷 P3629】 [APIO2010]巡逻 (树的直径)

    题目链接 容易发现,当加一条边时,树上会形成一个环,这个环上的每个点都是只要走一次的,也就是说我们的答案减少了这个环上点的个数,要使答案最小,即要使环上的点最多,求出直径\(L\),则答案为\(2(n ...

  6. [bzoj1717][Usaco2006 Dec]Milk Patterns 产奶的模式——后缀数组

    Brief Description 给定一个字符串,求至少出现k次的最长重复子串. Algorithm Design 先二分答案,然后将后缀分成若干组.判断有没有一个组的后缀个数不小于k.如果有,那么 ...

  7. 手机端的META

    一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...

  8. LCD实验学习笔记(一):Makefile

    主Makefile总领全局的就这句—— lcd.bin: $(objs) 要生成lcd.bin,依赖于objs列举的一堆文件:head.o init.o nand.o interrupt.o seri ...

  9. Linux服务器中毒事件(libudev.so)

    今天机房管理人员反馈公司的某台服务器在防火墙上的连接数超限,登陆服务器时发现非常卡顿,远程登录后查看,CPU持续100%,且有一长度为10的随机字符串进程,kill掉,会重新生成另外长度为10的字符串 ...

  10. 利用opencv自带源码,调试摄像头做人脸检测

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring 和 http://www.cnblogs.com/xujianqing/ 作者: ...