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 种类 ...
随机推荐
- vue-router之 beforeRouteEnter
beforeRouteEnter在每次路由切换都执行 ,而项目优化后,切换路由mounted只在最开始执行一次 beforeRouteEnter的具体用法可参考官方文档 https://cn.vuej ...
- 把Scheme翻译成Java和C++的工具
一.为什么要写这个工具? 公司内容有多个项目需要同一个功能,而这些项目中,有的是用Java的,有的是用C++的,同时由于某些现实条件限制,无法所有项目都调用统一的服务接口(如:可能运行在无网络的情况下 ...
- Python学习 Day 9 property 多重继承 Mixin
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 为了限制score的范围,可以通过一 ...
- VB6程序中NULL注意事项
VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出. 通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如 rsMoney.F ...
- js控制页面跳转,清缓存,强制刷新页面
单看标题,必定满脸蒙13. 其实,想表达的仅仅是,在js中通过window.location.href控制页面跳转时,有时会跳转至缓存页面,并没有真正去请求要跳转的地址,导致页面数据未能及时加载刷新. ...
- [备忘]Notification的实用
Intent resultIntent = null; if (!TextUtils.isEmpty(tid)){ resultIntent = new Intent("com.shijie ...
- 添加QScintilla时显示无法解析的外部函数
转载请注明出处:http://www.cnblogs.com/dachen408/p/7147165.html 问题:添加QScintilla时显示无法解析的外部函数 解决方案:去掉头文件qscisc ...
- Android(java)学习笔记203:JNI之NDK开发步骤
1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...
- python3安装opencv及电子书籍(百度云)
不能直接 pip install opencv 正解: pip install opencv-python 记得:请确保网络良好!!!!! (1)这个是我学习的电子书籍:opencv-python ...
- Linux Mint 教程
Linux Mint 安装文本编辑软件 sudo apt-get install gedit linux操作系统上面开发程序, 光有了gcc 是不行的它还需要一个 build-essential软 ...