[中等] UVa OJ 11400 Lighting system design 动态规划
来源:互联网 发布:蓝雨伞之恋 知乎 编辑:程序博客网 时间:2024/06/03 20:28
题目描述
基本思路:(类比最长上升子序列LIS问题)
首先,对于每种电源的灯泡要么全换,要么不换,因为不能将大电压的灯泡换成小电压的,因此先将灯泡按电压大小排序,排完序后,就是一个考虑第i种灯泡换不换的问题了,是个多阶段决策问题,因此考虑动态规划。设d[i]为前i种灯泡的最小费用,s[i]为前i种灯泡的总数,c[i]为第i种灯泡的单价,k[i]为第i种灯泡的电源价格,则状态转移方程为:
d[i]=min{d[j]+(s[i]-s[j])*c[i]+k[i]},0=<j<=i,1<=i<=n
注意,上式中当j为0时表示将之前的所有灯泡全部换为第i种。边界条件d[0]=0
具体代码:
#include <iostream>#include <algorithm>using namespace std;struct lamp{ int v,k,c,l; bool operator < (const lamp& rhs) const { return v<rhs.v; }};const int maxn=1000+5;lamp lp[maxn];int s[maxn];int d[maxn];int main(){ int n; for(cin>>n;n!=0;cin>>n) { for(int i=1;i<=n;++i) { cin>>lp[i].v>>lp[i].k>>lp[i].c>>lp[i].l; } sort(lp+1,lp+1+n); s[0]=0; for(int i=1;i<=n;++i) { s[i]=s[i-1]+lp[i].l; } d[0]=0; for(int i=1;i<=n;++i) { d[i]=d[i-1]+lp[i].l*lp[i].c+lp[i].k; for(int j=0;j<i;++j) d[i]=min(d[i],d[j]+(s[i]-s[j])*lp[i].c+lp[i].k); } cout<<d[n]<<endl; } return 0;}
阅读全文
0 0
- [中等] UVa OJ 11400 Lighting system design 动态规划
- 【UVA】11400-Lighting System Design(动态规划)
- UVa - 11400 - Lighting System Design(线性动态规划)
- UVa OJ 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
- UVa 11400 Lighting System Design
- 关于约瑟夫问题(Josephus Problem)
- 剑指offer:链表中环的入口结点
- 安卓按键读取txt开头出现未知字符的问题
- Codeforces Round #433 (Div. 1) B Jury Meeting(思维)
- 文章标题
- [中等] UVa OJ 11400 Lighting system design 动态规划
- HTML1.1
- C语言--位运算
- mybatis $ 和# 的区别
- iOS 内存管理~深拷贝(Deep Copy)
- dlib 01 dlib vs2015 编译 win10
- PAT (Advanced) 1007. Maximum Subsequence Sum (25)
- 哈夫曼编码与哈夫曼树
- 数论知识