第四届省赛题 节能

来源:互联网 发布:java删除sftp文件夹 编辑:程序博客网 时间:2024/04/25 17:02

节能

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

Dr.Kong设计的机器人卡多越来越聪明。最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关掉ZK大道右侧上所有的路灯。

卡多每到早晨5:00准会在ZK大道上某盏路灯的旁边,然后他开始关灯。每盏灯都有一定的功率,机器人卡多有着自觉的节能意识,它希望在关灯期间,ZK大道右侧上所有路灯的耗电量总数是最少的。

机器人卡多以1m/s的速度行走。假设关灯动作不需要花费额外的时间,因为当它通过某盏路灯时就顺手将灯关掉。

请你编写程序,计算在给定路灯设置,灯泡功率以及机器人卡多的起始位置的情况下,卡多关灯期间,ZK大道上所有灯耗费的最小能量。

输入
有多组测试数据,以EOF为输入结束的标志
每组测试数据第一行: N 表示ZK大道右侧路灯的数量 (2≤ N ≤ 1000) 
第二行: V 表示机器人卡多开始关灯的路灯号码。 (1≤V≤N)
接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每盏灯的参数

D表示该路灯与ZK大道起点的距离 (用米为单位来表示),
W表示灯泡的功率,即每秒该灯泡所消耗的能量数。路灯是按顺序给定的。
( 0≤D≤1000, 0≤W≤1000 )
输出
输出一个整数,即消耗能量之和的最小值。注意结果小于200,000,000
样例输入
4 32 25 86 18 7
样例输出

56

很难的一道dp题。。看了别人的程序  马马虎虎能懂点

对于关灯的选择,机器人只能向左走,向右走

dp[i][j][0]:i~j之间的灯全部关闭,且机器人此时站在i处

dp[i][j][1]:i~j之间的灯全部关闭,且机器人此时站在j处。

incre[i,j]:从i走到j所耗费的能量

动态转移方程为:

dp[i][j][0]=min(dp[i+1][j][0]+incre[i+1,i]),dp[i+1][j][1]+incre[j,i]);

dp[i][j][1]=min(dp[i][j-1][0]+incre[j,i]),dp[i][j-1][1]+incre[j,j-1]);



#include <stdio.h>  #include <string.h>  #include <algorithm>  using namespace std;  int d[1005];  int v[1005];  int dp[1005][1005][2];  int main()  {      int n;      while(~scanf("%d",&n))      {          memset(d,0,sizeof(d));          memset(v,0,sizeof(v));          memset(dp,100,sizeof(dp));          int s,sum=0;          scanf("%d",&s);          for(int i=1;i<=n;i++)          {              scanf("%d %d",&d[i],&v[i]);              sum+=v[i];              v[i]+=v[i-1];          }          dp[s][s][0]=dp[s][s][1]=0;          //初始化:向左走           for(int i=s-1;i>0;i--)          {              //i~s之间灯全熄灭且站在i处  从起点s到i 最小一定是向左直接走               dp[i][s][0]=dp[i+1][s][0]+(d[i+1]-d[i])*(sum-v[s]+v[i+1-1]);              //i~s之间灯全熄灭且站在s处  最小一定是 s~i~s.s~i的最小值为dp[i][s][0],i~s直接计算。               dp[i][s][1]=dp[i][s][0]+(d[s]-d[i])*(sum-v[s]+v[i-1]);          }          //初始化:向右走          for(int i=s+1;i<=n;i++)          {              dp[s][i][1]=dp[s][i-1][1]+(d[i]-d[i-1])*(sum-v[i-1]+v[s-1]);              dp[s][i][0]=dp[s][i][1]+(d[i]-d[s])*(sum-v[i]+v[s-1]);          }           for(int i=s-1;i>0;i--)          {              for(int j=s+1;j<=n;j++)              {                  //向左走                   dp[i][j][0]=min(dp[i+1][j][0]+(d[i+1]-d[i])*(sum-v[j]+v[i]),                                  dp[i+1][j][1]+(d[j]-d[i])*(sum-v[j]+v[i]));                  //向右走                   dp[i][j][1]=min(dp[i][j-1][0]+(d[j]-d[i])*(sum-v[j-1]+v[i-1]),                                  dp[i][j-1][1]+(d[j]-d[j-1])*(sum-v[j-1]+v[i-1]));              }          }          printf("%d\n",min(dp[1][n][0],dp[1][n][1]));      }      return 0;  }          


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电机线圈处于平衡位置怎么办 混联电路求电功率最小怎么办 电脑超出工作频率范围怎么办 手机红外线感应器坏了怎么办 我的世界左右慢怎么办 发电机自动启停装置故障怎么办 如果自动启停没关发动机涉水怎么办 偏激的人不分手怎么办 被极端的人纠缠怎么办 对固执偏激的人怎么办 车子右前轮偏磨怎么办? 轮胎边缘磨黑了怎么办 36周胎儿绕颈一周怎么办 孕中期胎儿偏小怎么办 怀孕34周偏小2周怎么办 胎盘低怎么办6个月了 怀孕四个月胎盘低怎么办 怀孕五个月胎盘低怎么办 怀孕3个月胎盘低怎么办 怀孕三个月了胎盘低怎么办 新房交房开发商拿不出证件怎么办? 新干式变压器未送电进水怎么办 三相380转单相220怎么办 外国人一直找你出去怎么办 美团众包跑腿单物品太重怎么办 美团退款成功后 物品怎么办 win10电脑没有网络图标怎么办 电脑开机桌面什么都没有怎么办 xp桌面什么都没有了怎么办 手机下滑通知栏不见了怎么办 跑800米赶上月经怎么办 强迫症吃药没效怎么办 复读生档案丢了怎么办 大学退学重新高考学籍怎么办 玻尿酸鼻子宽了怎么办 被昆山市圆通快递公司骗怎么办 借壳上市后壳公司怎么办 盐城国有民办学校倒闭教师怎么办 联想复印机显示更换墨粉盒怎么办 襄垣县共公自行车卡怎么办 转南京江宁户口怎么办儿童医保