您的位置:首页 > 其它

UVA 11400 Lighting System Design

2017-10-25 12:41 337 查看
#include<stdio.h>
#include<string.h>
#include<algorithm>
///题解在下面
using namespace std;
#define N 100005
#define inf 0x3f3f3f3f
int dp
;
struct data
{
int v,k,c,l;///电压  电源费用  灯泡费用  数量
friend bool operator <(data a,data b)
{
return a.v<b.v;
}
} a
;
int num
;
int main()
{
int n;
while(scanf("%d",&n),n)
{
memset(dp,inf,sizeof(dp));
for(int i=1; i<=n; i++)
{
scanf("%d%d%d%d",&a[i].v,&a[i].k,&a[i].c,&a[i].l);
}
sort(a+1,a+1+n);
num[0]=0;
for(int i=1; i<=n; i++)
{
num[i]=num[i-1]+a[i].l;
}
dp[1]=0;
for(int i=1; i<=n; i++)
{
dp[i]=num[i]*a[i].c+a[i].k;
for(int j=0; j<i; j++)
{
dp[i]=min(dp[i],dp[j]+(num[i]-num[j])*a[i].c+a[i].k);
}
}
printf("%d\n",dp
);
}
}


以上是AC 代码。

对电压进行排序

存储每一种从前到后每一种灯泡所需要的数量和

dp[i] 是指  1 - i 灯泡安排完成的最少花费。

替换的时候从 j - i 全部替换成 灯泡 i 然后+ dp【i-1】

询问:会不会漏情况?

答案 : 不会的。

证明:

假设我们用4 替换 1 3 比 替换 1 2 3 划算

也就是 现在已经替换 2 的灯泡(或者是他本身)比 4 的价值更低。

但是 1 的价值要比 4 的高。

但是 1 2 已经完成过替换了

所以 2 的价值 > = 1 的价值

所以我们一开始的假设不成立

所以啦不会漏情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: