9-6 UVa 11400
参考 http://www.cnblogs.com/Kiraa/p/5510757.html
http://www.cnblogs.com/zhaopAC/p/5159950.html
根据题目说明中的这句话
reduce the total system cost by eliminating some of the voltage sources and replacing the
lamps of that category with higher rating lamps.
可以判断某种电压的灯泡如果要换就全换,否则就不会eliminate某种电压。
这条题目的难点在于最优解符合一定的模式。
设d[i]为子问题灯泡1...i的最小开销,当前考虑灯泡种类i,d[i-1]已经是最优解。
编号1...(i-1)代表每种灯泡,按照电压从低到高排序,在最优解中,可能某个编号代表的灯泡已经被替换,但数量不变。
设每种灯泡的参数分别存放在V[],K[],C[],L[]这些数组中。
设 1<=j<=(i-1),j这种灯泡可以被替换成i这种灯泡,那么需要满足以下这些条件
1) V[j] < V[i]
2) K[j] + C[j]*L[j] < C[i]*L[j]
如果在编号 (j+1)...(i-1)这些种类的灯泡中有个编号x != j
因为1...(i-1)这些灯泡已经构成的最优解,j没有被x替换,那么需要满足以下这些条件
3) V[j] < V[x]
4) K[j] + C[j]*L[j] >= C[x]*L[j]
根据公式 2) 和 4)可知
C[x] <= C[i]
所以 K[x] + C[x]*L[x] < C[i]*L[x]
所以x这种灯泡也可以被替换成i
替换的模式是,如果某种灯泡可以被替换成i,那这种灯泡右边的灯泡都可以被替换成i
设s[i]为前i种灯泡的总数量,
d[i] = min{d[j] + (s[i]-s[j])*C[i] + K[i]} // 0 <= j <= (i-1)
1...j不替换,费用是d[j],(j+1)到(i-1)被替换成i,费用是(s[i]-s[j])*C[i] + K[i]
j = 0时,d[0] = 0,s[0] = 0,d[i] = s[i] * C[i] + K[i],相当于全部替换成i
#define _CRT_SECURE_NO_WARNINGS #include <cstdio>
#include <cstring>
#include <algorithm>
#include <numeric> using namespace std; struct Lamp {
int V; // 1 <= V <= 132000, voltage rating
int K; // 1 <= K <= 1000, cost of voltage source of this rating
int C; // 1 <= C <= 10, cost of a lamp of this rating
int L; // 1 <= L <= 100, number of lamps required
}; int n; // 1 <= n <= 1000
const int maxn = ;
Lamp a[maxn + ];
int s[maxn + ];
int d[maxn + ]; bool comp(const Lamp &a, const Lamp &b)
{
return a.V < b.V;
} int main()
{ while (scanf("%d", &n) && n) {
for (int i = ; i <= n; i++){
scanf("%d%d%d%d", &a[i].V, &a[i].K, &a[i].C, &a[i].L);
} sort(a + , a + n + , comp); // sort based on voltage s[] = ; // s[i] = sum of numbers of 1..i types of lamps
for (int i = ; i <= n; i++) {
s[i] = s[i - ] + a[i].L;
} d[] = ; // d[i] = minium cost with 1..i types of lamps
for (int i = ; i <= n; i++){
d[i] = a[i].K + a[i].C * s[i]; // replace all lamps with type i
for (int j = ; j < i; j++) {
d[i] = min(d[i], d[j] + (s[i] - s[j])*a[i].C + a[i].K); // replace j+1...i with type i
}
} printf("%d\n", d[n]);
} return ;
}
9-6 UVa 11400的更多相关文章
- Uva 11400,照明系统设计
题目链接:https://uva.onlinejudge.org/external/114/11400.pdf 题意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要 ...
- UVa 11400 - Lighting System Design(线性DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 11400 Lighting System Design
题意: 一共有n种灯泡,不同种类的灯泡必须用不同种电源,但同一种灯泡可以用同一种电源.每种灯泡有四个参数: 电压值V.电源费用K.每个灯泡的费用C.所需该种灯泡的数量L 为了省钱,可以用电压高的灯泡来 ...
- UVa 11400 Lighting System Design【DP】
题意:给出n种灯泡,分别给出它们的电压v,电源费用k,每个灯泡的费用c,和所需灯泡的数量l,问最优方案的费用 看的紫书= = 首先是dp[i]为灯泡1到i的最小费用, dp[i]=min(dp[i], ...
- 【线性结构上的动态规划】UVa 11400 - Lighting System Design
Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the tas ...
- uva 11400 Problem F Lighting System Design
紫皮书题: 题意:让你设计照明系统,给你n种灯泡,每种灯泡有所需电压,电源,每个灯泡的费用,以及每个灯泡所需的数量.每种灯泡所需的电源都是不同的,其中电压大的灯泡可以替换电压小的灯泡,要求求出最小费用 ...
- UVA - 11400 Lighting System Design (区间DP)
这个问题有两个点需要注意: 1. 对于一种灯泡,要么全换,要么全不换. 证明: 设一种灯泡单价为p1,电池价格为k1,共需要L个,若把L1个灯泡换成单价为p2,电池为k2的灯泡,产生的总花费为p1*L ...
- Uva 11400 照明系统
有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L.注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代.为了节约成 ...
- UVa 11400 照明系统设计
https://vjudge.net/problem/UVA-11400 题意: 有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L.注意到,电压相同的灯 ...
- uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
本题难处好像是在于 能够把一些灯泡换成电压更高的灯泡以节省电源的钱 .所以也才有了对最优方案的探求 好的处理方法是依照电压从小到大排序.仅仅能让前面的换成后面的.也就满足了把一些灯泡换成电压更高的灯泡 ...
随机推荐
- ubuntu上源码编译安装mysql5.7.27
一.查看操作系统环境和目录结构,并创建mysql用户和组,以及规划安装mysql所需要的目录. #cat /etc/issue 查看发行版本信息: #cat /proc/version 查看正在运行 ...
- 基于 DataLakeAnalytics 的数据湖实践
随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析.这样的好 ...
- php 7.2 安装 mcrypt 扩展
升级 php 7.2 后,使用微信提供的加解密代码时,提示 call to undefined function mcrypt_module_open() :大脑疯狂运转1秒钟后,得出结论:php 7 ...
- 基于遗传算法(Genetic Algorithm)的TSP问题求解(C)
基于遗传算法的TSP问题求解(C) TSP问题: TSP(Travelling salesman problem): 译作“旅行商问题”, 一个商人由于业务的需要,要到n个城市,每个城市之间都有一条路 ...
- Android——兼容性
两种类型的兼容性:设备兼容性和应用兼容性. 设备的Android兼容性就是app能够正确运行的Android执行环境(Android execution environment).Android执行环 ...
- Facebook iOS App如何优化启动时间
http://www.cocoachina.com/ios/20160105/14870.html 提高 Facebook 应用的性能已经成为 Facebook 持续关注的领域.因为我们相信一个高性能 ...
- SDUT-3400_数据结构实验之排序三:bucket sort
数据结构实验之排序三:bucket sort Time Limit: 250 ms Memory Limit: 65536 KiB Problem Description 根据人口普查结果,知道目前淄 ...
- 【POJ 3261】Milk Patterns
[链接]h在这里写链接 [题意] 给你一个长度为n的序列. 问你能不能在其中找到一个最长的子串. 这个子串至少出现了k次. [题解] 长度越长,就越不可能出现k次 后缀数组+二分. N最大为2 ...
- CodePlus2017 12月月赛 div2火锅盛宴
当时看到这道题感觉真是难过,我数据结构太弱啦. 我们来看看需要求什么: 1.当前熟了的食物的最小id 2.当前熟了的食物中有没有编号为id的食物 3.当前没熟的食物中有没有编号为id的食物 4.当前没 ...
- 阿里巴巴资深技术专家无相:我们能从 InteliJ IDEA 中学到什么?
本文来源于阿里巴巴资深技术专家无相在内网的分享,阿里巴巴中间件受权发布. 最近因为工作的关系,要将 Eclipse 的插件升级为 IDEA 插件.升级过程中,对 IDEA 插件做了些学习和研究,希望通 ...