UVA 11400_ Lighting System Design
来源:互联网 发布:海康提示网络不可达 编辑:程序博客网 时间:2024/06/05 11:51
题意:
给定一系列灯泡的额定功率,电源价钱,一个灯泡的价格以及系统所需该种灯泡的数量。已知流过灯泡的电流相等,所以为省钱可以将电压小的灯泡换成电压大的灯泡,但是不能换成电压更小的灯泡,问最少要花多少钱。
分析:
首先要明确:
- 只要是电压大的比电压小的便宜,就一定要用大的替换小的灯泡。
- 替换必须是全部替换,不能替换一部分,即用某一种大的替换某种小的全部的灯泡。反正替换的灯泡个数没有限制,为什么不尽可能多的把又小又贵的灯泡替换掉,况且如果不全部替换,还要多交一份电源钱。
用大的替换小的,对于每一种灯泡,判断他是否可以替换某种小的,所以现将各种灯泡根据电压进行从小到大排序,定义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;}
看到问题还是要想清楚,想不清楚就多读几遍题,真正深入理解问题
0 0
- UVA 11400_ Lighting System Design
- UVA 11400 Lighting System Design
- UVA 11400 Lighting System Design
- uva 11400 Lighting System Design
- uva 11400 Lighting System Design
- UVa - 11400 - Lighting System Design
- UVA - 11400 Lighting System Design
- uva 11400 - Lighting System Design
- uva 11400 Lighting System Design
- uva 11400 Lighting System Design
- UVa 11400 Lighting System Design
- uva 11400 Lighting System Design
- UVA 11400 Lighting System Design
- UVa 11400 Lighting System Design
- Lighting System Design UVa 11400
- UVa-11400 Lighting System Design
- [UVA 11400] Lighting System Design
- UVA 11400 Lighting System Design
- utf8解决JSP中文乱码问题
- linux习惯每天一个命令之mount命令
- Hibernate细节
- 今天是春节
- Codeforces Round #342 (Div. 2)(A)贪心,数学
- UVA 11400_ Lighting System Design
- Codeforces Round #342 (Div. 2)(B)贪心
- 即使是新春
- assets下的文件都包装成Drawable对象
- Codeforces Round #342 (Div. 2)(C)构造
- win7之替换开机登录背景图
- hdu3001 Travelling(状态压缩dp,三进制)
- 如何获取微信红包照片的原始清晰图片
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结