zoukankan      html  css  js  c++  java
  • 洛谷 P1220 关路灯 (区间DP)

      讨论  题解  

    题目描述

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

    为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电。他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯。开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大的一边,再回过头来关掉另一边的路灯,而事实并非如此,因为在关的过程中适当地调头有可能会更省一些。

    现在已知老张走的速度为1m/s,每个路灯的位置(是一个整数,即距路线起点的距离,单位:m)、功率(W),老张关灯所用的时间很短而可以忽略不计。

    请你为老张编一程序来安排关灯的顺序,使从老张开始关灯时刻算起所有灯消耗电最少(灯关掉后便不再消耗电了)。

    输入输出格式

    输入格式:

    文件第一行是两个数字n(0<n<50,表示路灯的总数)和c(1<=c<=n老张所处位置的路灯号);

    接下来n行,每行两个数据,表示第1盏到第n盏路灯的位置和功率。

    输出格式:

    一个数据,即最少的功耗(单位:J,1J=1W·s)。

    输入输出样例

    输入样例#1:
    5 3
    2 10
    3 20
    5 20
    6 30
    8 10
    输出样例#1:
    270  

    说明

    输出解释:

    {此时关灯顺序为3 4 2 1 5,不必输出这个关灯顺序}

     1 /*
     2 考虑 四种情况消耗功率的最小值
     3 如果 i,j路灯关了 i-j之间一定也关了 不要问为什么 
     4 如果关闭一个区间的灯,最后人一定在这个区间的左边或右边,关了左边或右边的灯去中间没必要。
     5 //f[i][j][0]表示关了[i,j]区间的灯最后人在i点的最优值,f[i][j][1]表示关了[i,j]区间的灯最后人在j点的最优值
     6 */
     7 #include<iostream> 
     8 #include<cstdio>
     9 #include<cstring>
    10 using namespace std;
    11 int d[100],w[100],s,n;
    12 int f[100][100][3];
    13 int main()
    14 {
    15     scanf("%d%d",&n,&s);
    16     for(int i=1;i<=n;i++)
    17     scanf("%d%d",&d[i],&w[i]),w[i]+=w[i-1];
    18     memset(f,127/3,sizeof(f));
    19     f[s][s][0]=f[s][s][1]=0;
    20     for(int i=s;i>=1;i--)
    21     for(int j=i+1;j<=n;j++)
    22     {
    23         f[i][j][0]=min(f[i+1][j][0]+(d[i+1]-d[i])*(w[n]-(w[j]-w[i])),f[i][j][0]);
    24         f[i][j][0]=min(f[i+1][j][1]+(d[j]-d[i])*(w[n]-(w[j]-w[i])),f[i][j][0]);
    25         f[i][j][1]=min(f[i][j-1][1]+(d[j]-d[j-1])*(w[n]-(w[j-1]-w[i-1])),f[i][j][1]);
    26         f[i][j][1]=min(f[i][j-1][0]+(d[j]-d[i])*(w[n]-(w[j-1]-w[i-1])),f[i][j][1]);
    27     }
    28     printf("%d",min(f[1][n][1],f[1][n][0]));
    29 }
    赎回你的泪光


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    Java实现 洛谷 P1060 开心的金明
    (Java实现) 洛谷 P1605 迷宫
    (Java实现) 洛谷 P1605 迷宫
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
    Java实现 洛谷 P1064 金明的预算方案
    (Java实现) 洛谷 P1031 均分纸牌
    QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
    武则天红人对唐睿宗的桃色报复(如此缺少城府,注定了要在宫廷中过早地出局)
  • 原文地址:https://www.cnblogs.com/whistle13326/p/6685217.html
Copyright © 2011-2022 走看看