20170213设计照明系统

                                                                              20170213设计照明系统

难度级别:C;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B

设计一个照明系统。共有n种灯泡供你选择,不同种类的灯泡必须使用不同种类的电源,但同一种灯泡可以共用一个电源。所有灯泡的电流参数相同,电压不同。现在给你每种灯泡的四个参数:电压V,电源费用K,每个灯泡的价格C,以及需要该种灯泡的数量L。为了减少费用,你可以把电压低的灯泡换成电压更高的灯泡,而省出电源的费用(某种灯泡全换成别的种类,就可以共用别的电源,从而少配一个电源,不就节约了一个电源的费用吗?)。请你配置方案,使系统造价最小。新的方案标准不能降低,灯泡的数量不能减少,电流相同、电压高的灯泡功率也更大,也会更亮。

第一行包括一个正整数n,接下来的n行,每行描述一种灯泡的参数,分别为V,K,C和L。两数之间用一个空格分隔。

一个数表示电源的最小费用。

3

12 300 10 30

18 400 15 28

30 500 13 30

1644

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<stdio.h>
 4 #include<memory.h>
 5 using namespace std;
 6 int dp[10010],s[11000];
 7 struct node    //结构体,电压V,电源费用K,每个灯泡的价格C,需要该种灯泡的数量L
 8 {
 9     int v,k,c,l;     //四个变量名称 
10     bool operator < (const node & a ) const      //针对a[ ].v进行排序,这就是一个模块,要记住!!! 
11     {
12         return v <a.v;
13     }
14 }A[1005];
15 int main()
16 {
17     int n,i,j,g;
18     cin>>n;
19     for(i=1;i<=n;i++) cin>>A[i].v>>A[i].k>>A[i].c>>A[i].l;      //输入 
20     sort(A+1,A+n+1);  //a[1].v~a[n].v从小到大。 
21     for(i=1;i<=n;i++) s[i]=s[i-1]+A[i].l; //前缀和(这样就可以快速的算出从一到n的A[i].l) 
22     memset(dp,27,sizeof(dp));
23     dp[0]=0;
24     for(i=1;i<=n;i++)
25         for(j=0;j<i;j++)
26             dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*A[i].c+A[i].k);
27     cout<<dp[n];
28 }
代码
原文地址:https://www.cnblogs.com/LZHE/p/6393873.html