CODEVS 1258 关路灯
写动归终于能不看题解一次A了!(其实交了两次,一次80一次A)
我练功发自真心!
多瑞卡得到了一份有趣而高薪的工作。每天早晨他必须关掉他所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。
多瑞卡每晚到早晨5点钟都在晚会上,然后他开始关灯。开始时,他站在某一盏路灯的旁边。
每盏灯都有一个给定功率的电灯泡,因为多端卡有着自觉的节能意识,他希望在耗能总数最少的情况下将所有的灯关掉。
多端卡因为太累了,所以只能以1m/s的速度行走。关灯不需要花费额外的时间,因为当他通过时就能将灯关掉。
编写程序,计算在给定路灯设置,灯泡功率以及多端卡的起始位置的情况下关掉所有的灯需耗费的最小能量。
输入文件的第一行包含一个整数N,2≤N≤1000,表示该村庄路灯的数量。
第二行包含一个整数V,1≤V≤N,表示多瑞卡开始关灯的路灯号码。
接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每盏灯的参数,其中0≤D≤1000,0≤W≤1000。D表示该路灯与村庄开始处的距离(用米为单位来表示),W表示灯泡的功率,即在每秒种该灯泡所消耗的能量数。路灯是按顺序给定的。
输出文件的第一行即唯一的一行应包含一个整数,即消耗能量之和的最小值。注意结果小超过1,000,000,000。
4
3
2 2
5 8
6 1
8 7
56
区间动规,然而我并没有用到区间长度?
每次的行动都是扩展已经关掉的区间,直至关掉灯的区间覆盖整个1-n路灯区间
在区间内,人要么停在左端点,要么停在右端点,而停在区间中间是浪费时间的行为
两种状态分开处理
f1(人在左边)[左区间][右区间]=最小耗电量
f2(人在右边)[左区间][右区间]=最小耗电量
当人在一个区间的右端点,要向右扩展一单位区间时,代价是dis[右端点][右端点+1]*未关的灯的功耗,向左同理
//动规
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int f1[1100][1100];//人在区间左
int f2[1100][1100];//人在区间右
int s[1100];
int dis[1100];
int w[1100];
int n;
int dp(int v){
int i,j;
int len=1;
for(i=v;i>=1;i--)
for(j=v;j<=n;j++){
len=dis[j]-dis[i];
f2[i][j]=min(f2[i][j],f1[i][j]+len*(s[n]-s[j]+s[i-1]));
f1[i][j]=min(f1[i][j],f2[i][j]+len*(s[n]-s[j]+s[i-1]));
int k;
for(k=j+1;k<=n;k++){
f2[i][k]=min(f2[i][k],f2[i][k-1]+(dis[k]-dis[k-1])*((s[n]-s[k-1])+s[i-1]));
}
for(k=i-1;k>=1;k--){
f1[k][j]=min(f1[k][j],f1[k+1][j]+(dis[k+1]-dis[k])*((s[n]-s[j])+s[k]));
}
}
return 1;
}
int main(){
int v;
scanf("%d\n%d",&n,&v);
int i,j;
for(i=1;i<=n;i++){
scanf("%d%d",&dis[i],&w[i]);
s[i]=s[i-1]+w[i];//总功率
}
memset(f1,1111,sizeof(f1));//初始化
memset(f2,1111,sizeof(f2));
for(int i=1;i<=n;i++)f1[i][i]=0,f2[i][i]=0;
dp(v);//以v为起始点开始动规
int ans=min(f1[1][n],f2[1][n]);
printf("%d",ans);
return 0;
}
“为什么不肯花钱装个总闸”
CODEVS 1258 关路灯的更多相关文章
- 109.关路灯(区间dp)
1258 关路灯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每 ...
- codevs1258关路灯
传送门 1258 关路灯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每天早晨他 ...
- codevs1258 关路灯(☆区间dp)
1258 关路灯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每天早晨他必须 ...
- 洛谷P1220 关路灯
洛谷1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关 ...
- Luogu 1220 关路灯(动态规划)
Luogu 1220 关路灯(动态规划) Description 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项 ...
- 洛谷P1220 关路灯(区间dp)
关路灯 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯.为了给村里节 ...
- 洛谷——P1220 关路灯
P1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉 ...
- 「LuoguP1220」 关路灯(区间dp
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- 【洛谷P1220】关路灯
题目有点难描述,内容请直接看原题.. 题解: 可以发现人在关路灯时无论走什么样的路径,从宏观上来看被关的灯总是构成一段包含初始点的连续区间.比如要关掉下标为 l (l < st)的灯,则一定要先 ...
随机推荐
- 本地不安装Oracle,plsql远程连接数据库
由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...
- JQuery demo
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...
- [WPF]资源字典——程序集之间的资源共享 简单换皮肤
直接上代码,已便已后自己查况阅,新手也可以看! 1.新建一个资料类和一个WPF工程 2.APP.XAML应该资源字典,注意应Source格式,前面一定要有“/” <ResourceDiction ...
- jquery.validate运用和扩展
一.运用 默认校验规则 ().required:true 必输字段 ().remote:"remote-valid.jsp" 使用ajax方法调用remote-valid.jsp验 ...
- 【Mysql】 my.ini配置一例
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-co ...
- Integrating JAD decompiler into JDeveloper(转)
原文地址:Integrating JAD decompiler into JDeveloper In JDeveloper, when debugging or otherwise navigatin ...
- jQuery Event.stopPropagation() 函数详解
stopPropagation()函数用于阻止当前事件在DOM树上冒泡. 根据DOM事件流机制,在元素上触发的大多数事件都会冒泡传递到该元素的所有祖辈元素上,如果这些祖辈元素上也绑定了相应的事件处理函 ...
- OC格式化标准符
%@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X ...
- UIButton利用分类扩展方法(封装)
UIButton+BackgroundColor.h #import <UIKit/UIKit.h> @interface UIButton (BackgroundColor) - (vo ...