传送门

Description

Translation

题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代。为了节约成本,你将设计一种系统,使之最便宜。

Input

Sample Input


Sample Output


Hint

  所有相同电压的灯泡共享一个电源。n<=1000。

Solution

  注意到一种灯泡要么不换要么全换。

    证明:如果灯泡只换一部分,那么说明被替换的一部分比不换省钱,那么全部换要比换那些省钱。如果不换,那么肯定都不换。

   接下来考虑阶段,由于只能小灯泡换成大灯泡,也就是说小灯泡怎么选对大灯泡没有影响,所以考虑以电压v升序作为阶段。设前i种灯泡的最优解是f[i]。

则有状态转移方程:

      f[i]=min{f[j]+(sum[i]-sum[j])*c+k}。其中sum为前缀和,表示区间[0,i]中的灯泡个数(非种类数)。

      正确性证明:

        方程的直观解释是先选取前j个的最优解,然后剩下的全部买i型电源。

        考虑到可能被hack的数据是[j+1,i]中有几种不选电源i,选择更大的电源。那么原灯泡会适配大电源,大电源在转移时一定被选择,那么电源花费不变,如果购买大电源灯泡花费更少,那么第i个也会被转移,满足无后效性。故方程成立。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1010 inline void qr(int &x) {
char ch=getchar();int f=;
while(ch>''||ch<'') {
if(ch=='-') f=-;
ch=getchar();
}
while(ch>=''&&ch<='') x=(x<<)+(x<<)+(ch^),ch=getchar();
x*=f;
return;
} inline int max(const int &a,const int &b) {if(a>b) return a;else return b;}
inline int min(const int &a,const int &b) {if(a<b) return a;else return b;}
inline int abs(const int &x) {if(x>) return x;else return -x;} inline void swap(int &a,int &b) {
int c=a;a=b;b=c;return;
} int n,frog[maxn],sum[maxn]; struct Light {
int v,k,c,l;
};
Light MU[maxn]; void clear() {
std::memset(MU,,sizeof MU);
std::memset(frog,0x3f,sizeof frog);
std::memset(sum,,sizeof sum);
frog[]=;
} inline bool cmp(const Light &a,const Light &b) {return a.v<b.v;} int main() {
qr(n);
while(n) {
clear();
for(int i=;i<=n;++i) {
qr(MU[i].v);qr(MU[i].k);qr(MU[i].c);qr(MU[i].l);
}
std::sort(MU+,MU++n,cmp);
for(int i=;i<=n;++i) sum[i]=sum[i-]+MU[i].l;
for(int i=;i<=n;++i) {
for(int j=;j<i;++j) {
frog[i]=min(frog[i],frog[j]+(sum[i]-sum[j])*MU[i].c+MU[i].k);
}
}
printf("%d\n",frog[n]);
n=;qr(n);
}
return ;
}

Summary

需要排序的题,一定排序完再写前缀和!!!

【神仙DP】【UVa11400】Lighting System Design的更多相关文章

  1. UVA11400 Lighting System Design(DP)

    You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...

  2. UVa11400 - Lighting System Design——[动态规划]

    题干略. 题意分析: 很容易理解一类灯泡要么全部换要么全不换,其实费用节省的主要原因是由于替换灯泡类型而排除了低压电压源,于是我们就可以推断出灯泡类型替换的原则: 对于两类灯泡a1和a2,a1可以被a ...

  3. uva11400 Lighting System Design

    题目大意: 有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L.注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代 ...

  4. 【Uva11400 Lighting System Design】动态规划

    分析 先按照电压从小到大排序,做一下前缀和s[i]求i之前的电灯泡的数量. 状态:$ F_i\(表示到\) i$个灯泡的最小开销. 状态转移方程:$ F_i=F_j+(s[i]-s[j])\times ...

  5. 【线性结构上的动态规划】UVa 11400 - Lighting System Design

    Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the tas ...

  6. (动态规划)UVA-11400:Lighting System Design

    You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...

  7. UVa 11400 Lighting System Design(DP 照明设计)

    意甲冠军  地方照明系统设计  总共需要n不同类型的灯泡  然后进入 每个灯电压v  相应电压电源的价格k  每一个灯泡的价格c   须要这样的灯泡的数量l   电压低的灯泡能够用电压高的灯泡替换   ...

  8. UVA - 11400 Lighting System Design

    题文: You are given the task to design a lighting system for a huge conference hall. After doing a lot ...

  9. UVa 11400 Lighting System Design【DP】

    题意:给出n种灯泡,分别给出它们的电压v,电源费用k,每个灯泡的费用c,和所需灯泡的数量l,问最优方案的费用 看的紫书= = 首先是dp[i]为灯泡1到i的最小费用, dp[i]=min(dp[i], ...

随机推荐

  1. git学习笔记(一)——从已存在的远程仓库克隆

    应用场景:在公司电脑把脚本上传到公司的gitlab上,在家里想继续写: 问题: 家里的之前代码连的是github的仓库,需要把公钥替换成公司gitlab的. 环境:win10,pycharm,git ...

  2. 通过 Python_Faker 生成测试数据

    通过 Python_Faker 生成测试数据 一.介绍 在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,你不可能通过手工来生成(最傻的方法)可能 ...

  3. 【sessionInfo】使用说明

    对象:sessionInfo 说明:会话类型操作,此对象是session与cookies的完善版,解决了session异常丢失及cookies文件大小的问题. 注意: 1)  访客的IP地址发生变化时 ...

  4. appium启动APP配置参数:

    一.Android启动app   python启动脚本如下:   from appium import webdriver   desired_caps = {} desired_caps['plat ...

  5. 基于物品的协同过滤算法(ItemCF)

    最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法—基于物品的协同过滤算法.ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通 ...

  6. HDU 3268/POJ 3835 Columbus’s bargain(最短路径+暴力枚举)(2009 Asia Ningbo Regional)

    Description On the evening of 3 August 1492, Christopher Columbus departed from Palos de la Frontera ...

  7. nodejs笔记--mysql篇(四)

    测试连接 var mysql = require('mysql'); //调用MySQL模块 //创建一个connection var connection = mysql.createConnect ...

  8. Spring Security 快速了解

    在Spring Security之前 我曾经使用 Interceptor 实现了一个简单网站Demo的登录拦截和Session处理工作,虽然能够实现相应的功能,但是无疑Spring Security提 ...

  9. Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  10. java面试95题

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...