zoukankan      html  css  js  c++  java
  • Uva 11400 照明系统

    有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代。为了节约成本,你将设计一种系统,使之最便宜。


    每种灯泡要么全换   要么不换,若只换一部分则需要两个电源,划不来。

    先把照明电压从小到大排序,y表示前i种灯泡的数量总和

    dp[i] = min(dp[i],dp[j]+(pnode[i].y-pnode[j].y)*pnode[i].x + pnode[i].k);

    (前j个用最优方案,再把 j+1~i 全用i替换)  =>  最优解dp[n]

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #define MAX 110
    using namespace std;
    struct node
    {
        int v;
        int k;
        int x;
        int y;
    }pnode[1005];
    
    bool cmp(node a,node b)
    {
        return a.v < b.v;
    }
    int dp[1005];
    int main()
    {
        int n;
        while(scanf("%d",&n) && n)
        {
            memset(pnode,0,sizeof(pnode));
            for(int i = 1;i <= n;i++)
            {
                scanf("%d%d%d%d",&pnode[i].v,&pnode[i].k,&pnode[i].x,&pnode[i].y);
            }
    
            sort(pnode+1,pnode+n+1,cmp);
            for(int i = 1;i <= n;i++)
                pnode[i].y += pnode[i-1].y;
            memset(dp,0,sizeof(dp));
            for(int i = 1;i <= n;i++)
                for(int j = 0;j < i;j++)
            {
                if(j == 0)
                    dp[i] = pnode[i].x*pnode[i].y + pnode[i].k;
                else
                dp[i] = min(dp[i],dp[j]+(pnode[i].y-pnode[j].y)*pnode[i].x + pnode[i].k);
            }
    
            printf("%d
    ",dp[n]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    产品经理怎么样用图表传达数据信息(多图)
    劣质成本分析(2/3+3/3)
    劣质成本分析(1/3)
    《归来》小诗二首
    减少过程中的浪费(2/2)
    减少过程中的浪费(1/2)
    三种过程分析工具
    必知-网站常用度量指标(2/2)
    必知-网站常用度量指标(1/2)
    产品经理网站数据分析之测量问题现状(四)
  • 原文地址:https://www.cnblogs.com/Przz/p/5409837.html
Copyright © 2011-2022 走看看