博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA - 11400 Lighting System Design
阅读量:7199 次
发布时间:2019-06-29

本文共 2863 字,大约阅读时间需要 9 分钟。

题文:

You are given the task to design a lighting system for a huge conference hall. After doing a lot of calculation and sketching, you have figured out the requirements for an energy-efficient design that can properly illuminate the entire hall. According to your design, you need lamps of n different power ratings. For some strange current regulation method, all the lamps need to be fed with the same amount of current. So, each category of lamp has a corresponding voltage rating. Now, you know the number of lamps and cost of every single unit of lamp for each category. But the problem is, you are to buy equivalent voltage sources for all the lamp categories. You can buy a single voltage source for each category (Each source is capable of supplying to infinite number of lamps of its voltage rating.) and complete the design. But the accounts section of your company soon figures out that they might be able to reduce the total system cost by eliminating some of the voltage sources and replacing the lamps of that category with higher rating lamps. Certainly you can never replace a lamp by a lower rating lamp as some portion of the hall might not be illuminated then. You are more concerned about money-saving than energy-saving. Find the minimum possible cost to design the system.

Input Each case in the input begins with n (1 ≤ n ≤ 1000), denoting the number of categories. Each of the following n lines describes a category. A category is described by 4 integers - V (1 ≤ V ≤ 132000), the voltage rating, K (1 ≤ K ≤ 1000), the cost of a voltage source of this rating, C (1 ≤ C ≤ 10), the cost of a lamp of this rating and L (1 ≤ L ≤ 100), the number of lamps required in this category. The input terminates with a test case where n = 0. This case should not be processed.

Output For each test case, print the minimum possible cost to design the system.

Sample Input

3

100 500 10 20

120 600 8 16

220 400 7 18

0

Sample Output

778

 

题解:

  又是一道十分巧妙的题目,首先很容易发现对于某种灯泡,要么全换,要么不换。因为如果要换,要么是灯泡比被换的更好,要么是整体更好,所以两种情况显然全部换才更优,才能省下电源钱。其二,对于这个题目,有个非常妙的性质——要换就是换连续的一个区间。因为如果不是一个区间,而是中间有某个灯泡断开了这个区间。就说明中间的使其断开的灯泡比当前更新的灯泡更优,那么为什么不能用断开的灯泡去更新前面的呢?

  所以就有了转移dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j])*a[i].c+a[i].k);dp[i]表示前i个的最小花费,就是说j之前用最优方案,j之后都用i号灯泡来更新。的确,贪心加dp,十分巧妙。

 

代码:

#include
#include
#include
#include
#include
#define ll long long#define MAXN 1010using namespace std;struct light{ int v,k,c,l;}a[MAXN];bool cmp(light x,light y){ return x.v
>a[i].v>>a[i].k>>a[i].c>>a[i].l; } dp[0]=0; sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i].l; for(int i=1;i<=n;i++){ for(int j=i-1;j>=0;j--){ dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j])*a[i].c+a[i].k); } } printf("%d\n",dp[n]); }}

 

转载于:https://www.cnblogs.com/renjianshige/p/7342514.html

你可能感兴趣的文章
WPF换肤之七:异步
查看>>
JSONPath介绍
查看>>
Direct3D驱动类型(DRIVER_TYPE)介绍
查看>>
Invalid bound statement (not found)
查看>>
Linux资源分析工具杂谈(长文慎入)
查看>>
mysql索引
查看>>
confluence的使用
查看>>
CentOS下双网卡双IP不同IP段配置
查看>>
Netty自带连接池的使用
查看>>
elasticSearch6源码分析(10)SettingsModule
查看>>
可怜的Bing同学,刚入学就罚站
查看>>
Dynamics CRM导出数据到Excel
查看>>
(轉貼) 用禅宗理解、软件开发的境界 (OO)
查看>>
电子书下载:Beginning JavaScript, 4th Edition
查看>>
电子书下载:Microsoft Windows Workflow Foundation 4.0 Cookbook
查看>>
Remobjects关于Channel is Busy 错误的解决方法
查看>>
其实Unix很简单
查看>>
最简单的工厂模式
查看>>
Windows下如何枚举所有进程
查看>>
Entity Framework 教程
查看>>