UVA 11400_ Lighting System Design
题意:
给定一系列灯泡的额定功率,电源价钱,一个灯泡的价格以及系统所需该种灯泡的数量。已知流过灯泡的电流相等,所以为省钱可以将电压小的灯泡换成电压大的灯泡,但是不能换成电压更小的灯泡,问最少要花多少钱。
分析:
首先要明确:
- 只要是电压大的比电压小的便宜,就一定要用大的替换小的灯泡。
- 替换必须是全部替换,不能替换一部分,即用某一种大的替换某种小的全部的灯泡。反正替换的灯泡个数没有限制,为什么不尽可能多的把又小又贵的灯泡替换掉,况且如果不全部替换,还要多交一份电源钱。
用大的替换小的,对于每一种灯泡,判断他是否可以替换某种小的,所以现将各种灯泡根据电压进行从小到大排序,定义dp[i]为使用前i种灯泡在满足需求的条件下所需最低价钱。状态转移方程:
dp[i] = min(dp[i], dp[j]+(s[i]-s[j])*lamp[i].c+lamp[i].k);
其中1~j已经是最优安排,j~i则全部使用第i种灯泡,因为要保证最优结果,所以花费肯定是从小到大排列,所以如果需要替换,从第一个比第i个灯泡花费小到第i个灯泡之前的所有灯泡都要替换的。明确这些代码就很好写啦。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1055, INF = 0x3fffffff;
int dp[maxn], s[maxn];
struct node{
int v,k,c,l;
}lamp[maxn];
bool cmp(node a, node b)
{
return a.v<b.v;
}
int main (void)
{
int n;
while(cin>>n&&n){
fill(dp, dp + maxn,INF);
dp[0]=0;
fill(s, s+maxn,0);
for(int i = 1; i <= n; i++)
cin>>lamp[i].v>>lamp[i].k>>lamp[i].c>>lamp[i].l;
sort(lamp+1, lamp + n+1, cmp);
for(int i = 0; i <= n; i++) s[i] = s[i-1]+lamp[i].l;
for(int i = 1; i <= n ; i++){
for(int j =0; j <= i; j++){
dp[i] = min(dp[i], dp[j]+(s[i]-s[j])*lamp[i].c+lamp[i].k);
}
}
cout<<dp[n]<<endl;
}
return 0;
}
看到问题还是要想清楚,想不清楚就多读几遍题,真正深入理解问题
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
题意: 一共有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 (区间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 种类 ...
随机推荐
- Laravel5中防止XSS跨站攻击的方法
本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HT ...
- Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)
Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会.对他们进行编译. 局部类型的限制 (1) 局部类型 ...
- jquery js 分页
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title>jQuery.pager ...
- spark on yarn模式下内存资源管理(笔记1)
问题:1. spark中yarn集群资源管理器,container资源容器与集群各节点node,spark应用(application),spark作业(job),阶段(stage),任务(task) ...
- samba的安装及其使用
参考pdf文档:https://pan.baidu.com/s/1iPJ1iPtNx7ZXNHRurrjfqw centos7 samba配置#centos7安装Sambayum -y install ...
- HTTP的缺点与HTTPS
a.通信使用明文不加密,内容可能被窃听 b.不验证通信方身份,可能遭到伪装 c.无法验证报文完整性,可能被篡改 HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护
- Java基础(十三)--深拷贝和浅拷贝
在上篇文章:Java基础(十二)--clone()方法,我们简单介绍了clone()的使用 clone()对于基本数据类型的拷贝是完全没问题的,但是如果是引用数据类型呢? @Data @NoArgsC ...
- MFC程序最小化到系统托盘及其响应函数
预备知识: Windows API函数: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ...
- java.util.MissingResourceException: Can't find bundle for base name db, locale zh_CN
在使用Bundle来加载配置文件的时候, 爆出了这个错误: 原因? 没有找到需要加载的配置文件,因为配置文件必须放在src目录下面, 如果放进了com.bj186.crm的包下面,就必须添加包的名称到 ...
- sql备份
SELECT id,Name FROM TeachSite GROUP BY id select * from #temp as [type], SchoolRollID,SUM(Chargeable ...