uva11400Lighting System Design(区间dp+贪心思想)
来源:互联网 发布:男朋友礼物 知乎 编辑:程序博客网 时间:2024/06/05 07:15
题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代。为了节约成本,你将设计一种系统,使之最便宜。
分析:
这个问题有两个点需要注意:
1、 对于一种灯泡,要么全换,要么全不换。 证明: 设一种灯泡单价为p1,电池价格为k1,共需要L个,若把L1个灯泡换成单价为p2,电池为k2的灯泡,产生的总花费为p1*L1+k1 + p2*(L-L1)+k2 (1)。全不换为p1*L+k1 (2),全换为p2*L+k2 (3)。让(1)式分别跟(2),(3)式做差,会发现一正一负的情况,从数学的角度上证明了,要么全换,要么全不换。
2、如果我要用第i种灯泡去替换前面的灯泡,那么一定是连续的替换,不可能出现间断,这也是这个问题的核心所在,他的原因很简单,给出一个排列,1,2,3,4,5。5向前替换,不可以出现4没有被替换,而3却被5替换的现象,因为这一定不是最优方案,4不被替换一定是比5更好,那么3就应该被4替换,而不该被5替换,这样对于4又是连续的替换了。 所以区间替换是正确的,也是这里最巧妙的,这样正确的限制决策成功方便了状态转移,并且不会丢失解。
所以我们定义dp[i]表示处理到第i中灯泡的最小花费,对于第i个灯泡,则是dp[i] = min(dp[i],dp[j] + (s[i]-s[j])*pi + ki),枚举j即连续的替换区间。最后dp[n]即使答案。
#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;const int maxn = 1005;struct Lamps{ int v, vs, pri, num;}l[maxn];bool cmp(Lamps a, Lamps b){ return a.v < b.v;}int dp[maxn], suml[maxn], n;int main(){ while(cin >> n && n) { for(int i = 1; i <= n; i++) cin >> l[i].v >> l[i].vs >> l[i].pri >> l[i].num; sort(l+1, l+n+1, cmp); suml[0] = dp[0] = 0; for(int i = 1; i <= n; i++) suml[i] = suml[i-1] + l[i].num; for(int i = 1; i <= n; i++) { dp[i] = suml[i]*l[i].pri + l[i].vs; for(int j = i-1; j >= 1; j--) { dp[i] = min(dp[i], dp[j] + (suml[i] - suml[j]) * l[i].pri + l[i].vs); } /*for(int j = 1; j < i; j++) { dp[i] = min(dp[i], dp[j] + (suml[i] - suml[j]) * l[i].pri + l[i].vs); }*/ } cout << dp[n] << endl; } return 0;}
0 0
- uva11400Lighting System Design(区间dp+贪心思想)
- uva11400Lighting System Design(简单DP+贪心)
- uva 11400 - Lighting System Design(dp+贪心)
- UVA 11400 Lighting System Design 【贪心】【DP】
- UVA 11400 Lighting System Design(贪心+DP)
- zoj3541(区间dp+贪心)
- 区间DP的主要思想
- uva11400--Lighting System Design DP
- uva 11400 Lighting System Design (dp)
- uva 11400 Lighting System Design (DP)
- Lighting System Design - UVa 11400 dp
- UVA 11400 Lighting System Design DP
- UVa 11400 Lighting System Design(DP)
- uva 11400 Lighting System Design dp
- UVa 11400 - Lighting System Design(DP)
- 11400 - Lighting System Design(DP)
- LightOJ 1295 Lighting System Design dp
- UVa 11400 - Lighting System Design(DP)
- LeetCode:139.Word Break
- 如何修改主机名hostname
- Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)
- Linux二进制分析
- firefox flash-plugin怎样安装
- uva11400Lighting System Design(区间dp+贪心思想)
- UVA/6-11/ 297
- 一个切换鼠标左右手的小工具
- 文奇的WY实习连载日记3.6-曹云金来了
- 浮躁的心态
- magento安装出现 PHP extension "soap" must be loaded.错误
- Java从入门到精通阅读笔记(第4版)5
- php-fpm解释
- 多线程_多线程程序的引入