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 的价值
所以我们一开始的假设不成立
所以啦不会漏情况
相关文章推荐
- uva11400 Lighting System Design
- uva11400 Lighting System Design
- uva 11400 Lighting System Design(dp~)
- UVA 11400 Lighting System Design——dp
- F - Lighting System Design UVA - 11400
- UVA 11400 Lighting System Design 【贪心】【DP】
- UVa 11400 Lighting System Design
- (UVA - 11400)Lighting System Design(DP)
- UVa 11400 Lighting System Design(DP 照明设计)
- UVA 11400 Lighting System Design 照明系统设计(DP)
- UVA11400 - Lighting System Design
- uva11400 lighting system design
- Lighting System Design UVA - 11400
- UVa #11400 Lighting System Design (例题9-6)
- uva 11400 Lighting System Design
- UVa - 11400 - Lighting System Design
- UVA 11400_ Lighting System Design
- Lighting System Design UVA - 11400 (LIS /DP)
- uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
- UVa11400 Lighting System Design