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

题干略。

题意分析:

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

  对于两类灯泡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类灯泡的总数目。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 #define maxn 1000
 6 int n;
 7 int V[maxn+5];
 8 int K[maxn+5];
 9 int C[maxn+5];
10 int L[maxn+5];
11 int id[maxn+5];
12 int s[maxn+5];
13 int d[maxn+5];
14 bool cmp(int a,int b){
15     return V[a]<V[b];
16 }
17 int dp(int i){
18     int ans=100000000;
19     for(int j=0;j<i;j++)
20         ans=min(ans,d[j]+C[id[i]]*(s[i]-s[j])+K[id[i]]);
21     return ans;
22 }
23 int main(int argc, const char * argv[]) {
24     while(scanf("%d",&n)==1&&n){
25         for(int i=1;i<=n;i++)
26             scanf("%d%d%d%d",&V[i],&K[i],&C[i],&L[i]);
27         for(int i=0;i<=n;i++)
28             id[i]=i;
29         sort(id+1,id+1+n,cmp);
30         s[0]=0;
31         for(int i=1;i<=n;i++)
32             s[i]=s[i-1]+L[id[i]];
33         d[0]=0;
34         for(int i=1;i<=n;i++)
35             d[i]=dp(i);
36         printf("%d\n",d[n]);
37     }
38     return 0;
39 }
时间: 2024-10-17 00:51:37

UVa11400 - Lighting System Design——[动态规划]的相关文章

UVA11400 Lighting System Design

题解: 贪心+dp 刚开始的做的想法是,将v从大到小排序. 然后dp[i]表示前i个的最小花费,dp[i]=dp[i-1]+cost(k); 也就是将i用1到i来代替.但是这样的话.对于电池的处理没有很好的处理方法 -------------------------------------------------------------------------------------------------------- 正解是 将v从小到大排序,那么dp[i]一定会有第i个电池.而且只需要第i

uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)

本题难处好像是在于 可以把一些灯泡换成电压更高的灯泡以节省电源的钱 ,所以也才有了对最优方案的探求 好的处理方法是按照电压从小到大排序,只能让前面的换成后面的,也就满足了把一些灯泡换成电压更高的灯泡 的要求: 一种电压的灯泡,要么不换,要换则应该全换:换,说明用当前的电源不值:而既然不值则应该全部换掉以避免使用当前电源,不然即增加了灯泡费用又没节省电源费用,亏大了... 状态转移详见代码 #include<cstdio> #include<cstring> #include<

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

Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the task to design a lighting system for a huge conference hall. After doing a lot of calculation & sketching, you have figured out the requirements for an e

UVA 14000 Lighting System Design(DP)

You are given the task to design a lighting system for a huge conference hall. After doing a lot of calculation & sketching, you have figured out the requirements for an energy-efficient design that can properly illuminate the entire hall. According

LightOJ 1295 Lighting System Design dp

链接:http://lightoj.com/volume_showproblem.php?problem=1295 1295 - Lighting System Design PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You are given the task to design a lighting system for a huge conference hall. After do

(动态规划)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 calculation and sketching, you have ?gured out the requirements for an energy-e?cient design that can properly illuminate the entire hall. According t

UVa 11400 Lighting System Design(DP 照明系统设计)

题意  设计某个地方的照明系统  一共需要n种不同类型的灯泡  接着输入 每种灯泡的电压v  对应电压电源的价格k  每个灯泡的价格c   需要这种灯泡的数量l   电压低的灯泡可以用电压高的灯泡替换   每种灯泡只需要一个对应的电源   求完成这个照明系统的最少花费 比较简单的DP  容易知道 当要替换一种灯泡中的一个到令一种电压较高的灯泡时  只有全部替换这种灯泡为另一种时才可能使总花费变小   全部替换掉就省下了这种灯泡的电源花费   先把灯泡按照电压排序   那么每种灯泡都可以替换他前面

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

意甲冠军  地方照明系统设计  总共需要n不同类型的灯泡  然后进入 每个灯电压v  相应电压电源的价格k  每一个灯泡的价格c   须要这样的灯泡的数量l   电压低的灯泡能够用电压高的灯泡替换   每种灯泡仅仅须要一个相应的电源   求完毕这个照明系统的最少花费 比較简单的DP  easy知道 当要替换一种灯泡中的一个到令一种电压较高的灯泡时  仅仅有所有替换这样的灯泡为还有一种时才可能使总花费变小   所有替换掉就省下了这样的灯泡的电源花费   先把灯泡依照电压排序   那么每种灯泡都能够

LightOJ 1295 Lighting System Design (排序+dp)

题目链接:LightOJ 1295  Lighting System Desig 题意:给出n种灯(v,k,c,l)分别是灯的(电压,所需电源费用,灯的单价,所需灯的数量),电压高的灯可以代替电压低的灯但是电压低的灯不能代替电压高的等,每种灯的电压各种相同,问选n种灯最小的花费. 思路: 因为电压高的灯可以代替电压低的灯--按电压高到低排序, 然后求前缀和--因为当出现代替时可以,快速统计灯的花费. 然后就是dp--状态方程:dp[i] 买前i类灯的最少花费,sum[i]前缀和.dp[i]=mi