UVa 11400 Lighting System Design
题意:
一共有n种灯泡,不同种类的灯泡必须用不同种电源,但同一种灯泡可以用同一种电源。每种灯泡有四个参数:
电压值V、电源费用K、每个灯泡的费用C、所需该种灯泡的数量L
为了省钱,可以用电压高的灯泡来代替电压低的灯泡。输出最小费用。
分析:
每种电源的灯泡要么不换要么全换,因为只换部分的话,两种类型的电源都要买,不划算。
将电压从小到大排序,s[i]表示前i种灯泡一共需要多少个灯泡,d[i]表示前i种灯泡最少费用。
d[i] = min{d[j] + (s[i] - s[j]) * c[i] + k[i]} (j = 0,,,i-1) (表示前j种灯泡用最优解,第j+1~i 种都被第 i 种灯泡所替换而且用第i种电源)
//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = + ;
struct Lamp
{
int v, k, c, l;
bool operator< (const Lamp& a) const
{
return v < a.v;
}
}lamps[maxn];
int s[maxn], d[maxn]; int main(void)
{
#ifdef LOCAL
freopen("11400in.txt", "r", stdin);
#endif int n;
while(scanf("%d", &n) == && n)
{
for(int i = ; i <= n; ++i)
scanf("%d%d%d%d", &lamps[i].v, &lamps[i].k, &lamps[i].c, &lamps[i].l);
sort(lamps + , lamps + + n);
s[] = ;
for(int i = ; i <= n; ++i) s[i] = s[i-] + lamps[i].l; d[] = ;
for(int i = ; i <= n; ++i)
{
d[i] = d[i-] + lamps[i].c * lamps[i].l + lamps[i].k; //用第i种灯泡和电源
for(int j = ; j < i; ++j)
{//前j种灯泡用最优解,第j+1~i 种都被第 i 种灯泡所替换而且用第i种电源
d[i] = min(d[i], d[j] + (s[i] - s[j]) * lamps[i].c + lamps[i].k);
}
}
printf("%d\n", d[n]);
} return ;
}
代码君
UVa 11400 Lighting System Design的更多相关文章
- 【线性结构上的动态规划】UVa 11400 - Lighting System Design
Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the tas ...
- UVa 11400 Lighting System Design(DP 照明设计)
意甲冠军 地方照明系统设计 总共需要n不同类型的灯泡 然后进入 每个灯电压v 相应电压电源的价格k 每一个灯泡的价格c 须要这样的灯泡的数量l 电压低的灯泡能够用电压高的灯泡替换 ...
- 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【DP】
题意:给出n种灯泡,分别给出它们的电压v,电源费用k,每个灯泡的费用c,和所需灯泡的数量l,问最优方案的费用 看的紫书= = 首先是dp[i]为灯泡1到i的最小费用, dp[i]=min(dp[i], ...
- UVA - 11400 Lighting System Design (区间DP)
这个问题有两个点需要注意: 1. 对于一种灯泡,要么全换,要么全不换. 证明: 设一种灯泡单价为p1,电池价格为k1,共需要L个,若把L1个灯泡换成单价为p2,电池为k2的灯泡,产生的总花费为p1*L ...
- uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
本题难处好像是在于 能够把一些灯泡换成电压更高的灯泡以节省电源的钱 .所以也才有了对最优方案的探求 好的处理方法是依照电压从小到大排序.仅仅能让前面的换成后面的.也就满足了把一些灯泡换成电压更高的灯泡 ...
- UVA 11400 Lighting System Design 照明系统设计
首先是一个贪心,一种灯泡要么全都换,要么全都不换. 先排序,定义状态d[i]为前面i种灯泡的最小花费,状态转移就是从d[j],j<i,加上 i前面的j+1到i-1种灯泡换成i的花费. 下标排序玩 ...
- UVA 11400"Lighting System Design"
传送门 错误思路 正解 AC代码 参考资料: [1]:https://www.cnblogs.com/Kiraa/p/5510757.html 题意: 现给你一套照明系统,这套照明系统共包含 n 种类 ...
- UVA - 11400 Lighting System Design(照明系统设计)(dp)
题意:共有n种(n<=1000)种灯泡,每种灯泡用4个数值表示.电压V(V<=132000),电源费用K(K<=1000),每个灯泡的费用C(C<=10)和所需灯泡的数量L(1 ...
随机推荐
- Win64位操作系统无法运行暗黑2战网D2GS的解决办法
前几天想在我的Win7 x64系统里做个战网自己玩,搭建完毕后进入战网创建房间出现经典的问题,“排队1”. 原因很清楚,就是D2GS无法启动:但是使用之前的各种办法尝试后无果,后来查看D2GS同目录下 ...
- OD鲜为人知的小技巧--搜索通配符(关键字)
我看过一些OD教程,关于通配符这一点很少有人讲解(大概是我看的教程少吧) 近日通过看<黑客反汇编揭秘(第二版)>第165页了解到,原来OD还有这样方便的功能,那就是搜索通配符: Olly ...
- memcached+memadmin
一.安装apache yum install httpd 二.安装php yum install php* 三.apache配置 vi /etc/httpd/conf/httpd.conf 添加Add ...
- 【WCF--初入江湖】05 WCF异步编程
05 WCF异步编程 一.服务设计最佳实践 在设计之初,是否用异步,应该由客户端来决定,而不应该去考虑服务的调用者调用的方式. 优点:充分利用多核CPU, 改善用户体验 缺点:滥用异步,会影响性能 二 ...
- uva 434
贪心 ~ #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #i ...
- 1. what is Lua?
glue language Lua is a proven, robust language, small.
- mac os 下如何清除/切换svn eclipse插件的用户
以mac os x为例(Unix/Linux类似), 1.打开命令行窗口,即用户的根目录(用户的home目录) $ ls -al ... drwxr-xr-x 6 linxyz staff ...
- StringBuffer用法
public class StringBufferTest { public static void main(String[] args) { StringBuffer sb=new StringB ...
- 在实体注解OneToMany时,要加上mappedby,避免产生中间表。
在实体注解OneToMany时,要加上mappedby,避免产生中间表.
- 拼写sql语句随笔
DECLARE @str NVARCHAR(1000)='SELECT * FROM dbo.V_MicroUserInfo ',@where VARCHAR(1000)=' where 1=1' D ...