zoukankan      html  css  js  c++  java
  • 【UVa11400】照明系统设计

    题目描述

    设计某个地方的照明系统 ,一共需要n种不同类型的灯泡 。接着输入每种灯泡的电压v ,对应电压电源的价格k ,每个灯泡的价格c ,需要这种灯泡的数量l 。电压低的灯泡可以用电压高的灯泡替换 , 每种灯泡只需要一个对应的电源  。求完成这个照明系统的最少花费。
    输入

    有多组数据。
    输出

    最小花费。
    样例输入

    3

    100 500 10 20

    120 600 8 16

    220 400 7 18

    0


    样例输出

    778



    题解

    设dp[ i ] 为买前 i 中灯泡的最小花费。 状态转移方程:  dp[ i ] = min { dp[ j ] + ( sum[ i ] - sum[ j ] ) * c[ i ] + k[ i ] }              其中,sum[ i ] 表示前 i 种灯泡的总数。

    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define ll long long
    
    const int maxn=1000+5;
    
    int n,dp[maxn],s[maxn];
    
    struct node{
        int v,k,c,l;
        bool operator<(const node &p) const {return v<p.v;}
    }a[maxn];
    
    template<typename T>void read(T& aa) {
        char cc; ll ff;aa=0;cc=getchar();ff=1;
        while((cc<'0'||cc>'9')&&cc!='-') cc=getchar();
        if(cc=='-') ff=-1,cc=getchar();
        while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
        aa*=ff;
    }
    
    int main(){
        while(scanf("%d",&n)==1&&n){
            memset(a,0,sizeof(a));
            memset(dp,127,sizeof(dp));
            memset(s,0,sizeof(s));
            for(int i=1;i<=n;i++){
                read(a[i].v);read(a[i].k);read(a[i].c);read(a[i].l);
            }
            sort(a+1,a+1+n);
            for(int i=1;i<=n;i++){
                s[i]=s[i-1]+a[i].l;
                dp[i]=a[i].k+a[i].c*s[i];
                for(int j=1;j<=i;j++)
                dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*a[i].c+a[i].k);
            }
            printf("%d
    ",dp[n]);
        }
        return 0;
    }
  • 相关阅读:
    人月神话第二遍(总)--读书笔记
    Python实现人脸检测(个人、多人、视频)
    软件体系架构的质量属性
    jdk1.8 使用的是什么垃圾回收器?
    【深入理解Java虚拟机】垃圾回收
    P2167 [SDOI2009]Bill的挑战
    二项式反演基础
    P5039 [SHOI2010]最小生成树
    快速莫比乌斯/沃尔什变换 (FMT/FWT)
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/rlddd/p/9495272.html
Copyright © 2011-2022 走看看