Lighting System Design (區間dp)


      題意很不好理解,輸入給的是N個燈泡的參數,然后一個電池可以帶好多個燈泡,電壓高的電池可以給電壓低的燈泡用(反過來不行)。

代碼:

/*
    給n個燈泡:
      v:  所需電壓
      k:  電壓價格
      c:  燈泡價格
      l:  燈泡所需個數
    要求:  低電壓燈泡可以使用高電壓電池,一個電池可以帶多個燈泡
            求 最少花費?
    分析: ① 要買夠燈泡
           ② 考慮 換電池
    方法: 按電池電壓排序,后面的一定能換前面的,
             再加以判斷
*/

#if 0

#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Node
{
    int v, k, c, l;
}nd[1010];
int sum[1010];
int dp[1010];
int cmp(Node a, Node b)
{
    return a.v<b.v;
}
int main()
{
    int N;
    while(cin>>N && N)
    {
        for(int i=1; i<=N; i++)
        {
            cin>>nd[i].v>>nd[i].k>>nd[i].c>>nd[i].l;
        }
        sort(nd+1, nd+N+1, cmp);
        memset(sum, 0, sizeof(sum));
        memset(dp, 0, sizeof(dp));
        for(int i=1; i<=N; i++)
        {
            sum[i]=sum[i-1]+nd[i].l;
        }
        for(int i=1; i<=N; i++)
        {
            dp[i]=sum[i]*nd[i].c+nd[i].k;
            for(int j=1; j<i; j++)
            {
                dp[i]=min(dp[i], dp[j]+(sum[i]-sum[j])*nd[i].c+nd[i].k);
            }
        }
        cout<<dp[N]<<endl;
    }

    return 0;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com