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 }