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;
    }
    

      

  • 相关阅读:
    eclipse workspace
    logcat and monkey
    git command
    Take Total Control of Internet Explorer with Advanced Hosting Interfaces
    #import 指令
    今天聊发兴致,写了一个 COM STEP BY STEP,结果。。。
    DECLARE_CLASSFACTORY_SINGLETON 宏
    对象微操
    宏定义缺失的解决
    读取地址本内容
  • 原文地址:https://www.cnblogs.com/Przz/p/5409837.html
Copyright © 2011-2022 走看看