zoukankan      html  css  js  c++  java
  • 区间DP code[vs]1258 关路灯

    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

    贴代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,v;
     7 int in;
     8 int d[1010],w[1010];
     9 int f[1010][1010],g[1010][1010];
    10 //f[i][j] 关掉[i,j]的代价,现在处在i,从右向左而来
    11 //g[i][j] 关掉[i,j]的代价,现在处在j,从左向右而来 
    12 
    13 int main(){
    14     scanf("%d",&n);
    15     scanf("%d",&v);
    16     for(int i=1;i<=n;i++) scanf("%d%d",&d[i],&in),w[i]=w[i-1]+in;
    17     memset(f,0x3f3f3f3f,sizeof(f));
    18     memset(g,0x3f3f3f3f,sizeof(g));
    19     f[v][v]=0;
    20     g[v][v]=0; 
    21     for(int i=2;i<=n;i++)//已关的数目 
    22         for(int j=(v>=i?v-i+1:1);j<=v&&j<=n-i+1;j++){//左端点 
    23             int e=j+i-1;//右端点 
    24             f[j][e]=min(f[j+1][e]+(d[j+1]-d[j])*(w[n]+w[j]-w[e]),g[j+1][e]+(d[e]-d[j])*(w[n]+w[j]-w[e]));
    25             g[j][e]=min(f[j][e-1]+(d[e]-d[j])*(w[n]+w[j-1]-w[e-1]),g[j][e-1]+(d[e]-d[e-1])*(w[n]+w[j-1]-w[e-1]));
    26         }
    27     printf("%d
    ",min(f[1][n],g[1][n]));
    28     return 0;
    29 }
  • 相关阅读:
    win10企业版激活密钥
    百科知识 手机QQ的视频如何保存
    华为荣耀7手机如何开启开发者模式,开启调试模式
    C#如何设置控件水平对齐,垂直对齐
    C#如何实现挂机锁
    JAVA_MyEclipse常见配置NETGEAR路由器如何设置
    JAVA_MyEclipse如何加载Tomcat
    VC++_错误 无法打开包括文件“glglut.h” No such file or directory 怎么办
    生活娱乐 达尔优的键盘鼠标如何打开和关闭呼吸灯
    新版的豌豆荚如何连接电脑
  • 原文地址:https://www.cnblogs.com/zwube/p/6808610.html
Copyright © 2011-2022 走看看