题干略。

题意分析:

  很容易理解一类灯泡要么全部换要么全不换,其实费用节省的主要原因是由于替换灯泡类型而排除了低压电压源,于是我们就可以推断出灯泡类型替换的原则:

  对于两类灯泡a1和a2,a1可以被a2替换的条件是:

    1)  v2>v1

    2)a2一定存在于最优解中(保证K2不被省去)

    3)C2*L1 - C1*L1 - K1<0

  基于以上替换原则首先将所有灯泡a1,a2,……,an 按电压非降序排列,我们可以假定状态d[i]为仅考虑前1~i个灯泡时的最优解(最小费用)。在计算d[i]时仅考虑用ai替换,ai一定存在于最优解中,满足条件(1)(2)。那么问题来了,采用何种替换方法呢?下面我们考虑[i-1]的最优解情况:

  假设前i-1个灯泡经过最优的替换后灯泡序列为b1,……,bj,bj+1,……bk(电压非降序排列);

  经分析bj和bj+1的关系一定满足:(1)Cj+1*Lj-Cj*Lj-Kj>0(否则bj可被bj+1替换,与当前为最优解的假设矛盾)。

  现在我们考虑用第i个灯泡 ai 替换的情况,假设bj可以被ai替换,那么有(2)Ci*Lj-Cj*Lj-Kj<0

  由不等式(1)(2)可知 Ci<Cj+1,即 Ci*Lj+1-Cj+1*Lj+1-Kj+1<0,  bj+1一定可以被ai替换,

  同理,bj~bk的所有灯泡都可以被ai替换,换句话说,在i-1个灯泡的最优替换序列 b1~aj~bk 中,如果存在 j(1<j<i-1),aj+1可以被ai替换,那么

aj+1~bk的所有灯泡都可以被ai替换;a1~aj个灯泡的最小费用已经算出为d[j]。这样我们就得出了ai的替换方法:前j个灯泡用之前计算出的最优方案d[j]购买,剩下j+1~i个灯泡全用ai替换,枚举j从0到i-1,,根据前面的讨论得知不会漏解,则状态转移方程 d[j]=min{ d[j]+c[i]*(s[i]-s[j])+k[i] | j from 0 to i-1 },s[i]为前i类灯泡的总数目。

代码如下:

 #include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 1000
int n;
int V[maxn+];
int K[maxn+];
int C[maxn+];
int L[maxn+];
int id[maxn+];
int s[maxn+];
int d[maxn+];
bool cmp(int a,int b){
return V[a]<V[b];
}
int dp(int i){
int ans=;
for(int j=;j<i;j++)
ans=min(ans,d[j]+C[id[i]]*(s[i]-s[j])+K[id[i]]);
return ans;
}
int main(int argc, const char * argv[]) {
while(scanf("%d",&n)==&&n){
for(int i=;i<=n;i++)
scanf("%d%d%d%d",&V[i],&K[i],&C[i],&L[i]);
for(int i=;i<=n;i++)
id[i]=i;
sort(id+,id++n,cmp);
s[]=;
for(int i=;i<=n;i++)
s[i]=s[i-]+L[id[i]];
d[]=;
for(int i=;i<=n;i++)
d[i]=dp(i);
printf("%d\n",d[n]);
}
return ;
}

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】动态规划

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

  3. uva11400 Lighting System Design

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

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

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

  5. (动态规划)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 ...

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

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

  7. UVA - 11400 Lighting System Design

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

  8. Lighting System Design UVA - 11400 动态规划

    题目:题目链接 思路:简单的动态规划问题,先把灯泡按照电压从小到大排序.设s[i]为前i种灯泡的总数量(即L值之和),d[i]为灯 泡1-i的最小开销,则d[i] = min{d[j] + (s[i] ...

  9. 【神仙DP】【UVa11400】Lighting System Design

    传送门 Description Translation 题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L.注意到,电压相同的灯泡只需要共享一个 ...

随机推荐

  1. 怎样判断一个exe可执行程序(dll文件)是32位的还是64位的

    看到一个比较简单粗暴的方式,做个记录. 直接用记事本或者notepad++(文本编辑软件都可)打开exe文件(dll文件), 会有很多乱码,接下来只需要在第二段中找到PE两个字母,在其后的不远出会出现 ...

  2. WPF快速入门系列(6)—— WPF资源和样式

    一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果 ...

  3. C++ UNREFERENCED_PARAMETER函数的作用

    新建win32 application程序,会有这样一段代码 int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hP ...

  4. JavaScript 生成32位UUID

    function uuid(){ var len=32; //32长度 var radix=16; //16进制 var chars='0123456789ABCDEFGHIJKLMNOPQRSTUV ...

  5. Python科学计算生态圈

  6. PLAY2.6-SCALA(十二) 表单的处理

    一.表单处理流程如下 1.定义一个表单,在这里表单最多有22个字段 import play.api.data._ import play.api.data.Forms._ //要使用验证和约束 imp ...

  7. LeetCode Top 100 Liked Questions in Golang(updating...)

    leetcode go语言版本,主要为了熟悉下语言 1. Two Sum 双指针版本, O(NlogN) func twoSum(nums []int, target int) []int { val ...

  8. 【转载】遗传算法及matlab实现

    摘自https://www.cnblogs.com/LoganChen/p/7509702.html 1.遗传算法介绍 遗传算法,模拟达尔文进化论的自然选择和遗产学机理的生物进化构成的计算模型,一种不 ...

  9. tyvj1017 冗余关系

    描述 Mrs.Chen是一个很认真很称职的语文老师 ......所以,当她看到学生作文里的人物关系描述得非常的麻烦的时候,她非常生气,于是宣布:凡是作文里有冗余关系的,一率罚抄出师表10次...同学们 ...

  10. Linux配置redis开机启动(CentOS 7)

    https://blog.csdn.net/qq_31803503/article/details/79246205 本次配置linux版本是CentOS 7 首先将  redis-3.2.3/uti ...