uva 11400——Lighting System Design

来源:互联网 发布:末日拾荒者 知乎 编辑:程序博客网 时间:2024/05/27 06:14

题意: 给定一些灯泡,每种灯泡有不同的电压v,电源费用k,每个灯泡的费用c,所需的灯泡的数量L,同种灯泡可以使用相同电源,问最小花费。


思路:dp,每种灯泡要么选要么不选两种状态,状态转移方程是d(i)=min(d[j]+(s[i]-s[j])*c[i]+k[i])。d[i]保存的是最小的开销。


code:

#include <bits/stdc++.h>using namespace std;#define ft(i,s,t) for (int i=s;i<=t;i++)const int N=1005;const int INF=0x3f3f3f3f;struct node{    int v,k,c,l;}g[N];int d[N],s[N];bool cmp(node A,node B){    return A.v<B.v;}int main(){    int n;    while (~scanf("%d",&n),n)    {        ft(i,1,n)        {            scanf("%d%d%d%d",&g[i].v,&g[i].k,&g[i].c,&g[i].l);        }        sort(g+1,g+1+n,cmp);s[0]=0;        ft(i,1,n) s[i]=s[i-1]+g[i].l;        ft(i,1,n)        {            d[i]=s[i]*g[i].c+g[i].k;            ft(j,1,i)            d[i]=min(d[i],d[j]+(s[i]-s[j])*g[i].c+g[i].k);        }        printf("%d\n",d[n]);    }}


0 0
原创粉丝点击