【Uva 11400】Lighting System Design
【Link】:
【Description】
你要构建一个供电系统;
给你n种灯泡来构建这么一个系统;
每种灯泡有4个参数
1.灯泡的工作电压
2.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的所有灯泡使用);
3.灯泡的单个价格
4.灯泡的所需个数;
现在,你可以把某一些灯泡换成另外一种灯泡电压要严格更高;
然后所需的灯泡个数不变,其他的都变成另外一种电压的属性;
问你最少需要花费多少钱构建这么一个供电系统;
(即买电源的钱+买灯泡的钱)
【Solution】
把所有的灯泡,按照电压的大小升序排;
设f[i]表示1..i这i个灯泡所需要的最小值;
则有
f[i]=min(f[j]+(sum[i]−sum[j])∗c[i]+k[i])
j∈[0..i−1]
sum[i]是灯泡数量的前缀和;
这个转移总是连续一段地把灯泡都转换成同一个有更大的电压的灯泡;
因为,我们可以保证总是这样连续一段都转成同一个灯泡的;
比如
1 2 3 4 5
假设最后最优的答案,3变成了5,但是4没有变成5;
我们可以肯定,这种情况是不可能的;
因为这里4没有变成5,就说明,4变成5是不划算的
也就是说4这个灯泡更便宜
这么看来,3没有必要变成5;
肯定是3变成4更优;
所以得到结论,肯定都是连续地一段变成了某一个灯泡,中间不可能有间断的没变的灯泡;
反证法??
【NumberOf WA】
0
【Reviw】
这种排除中间不会有间断的,只能是连续一段转移的思维方式值得思考;
【Code】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1100;
const int INF = 0x3f3f3f3f;
struct abc{
int v,k,c,l;
};
int n,sum[N],dp[N];
abc a[N];
bool cmp(abc a,abc b){
return a.v < b.v;
}
int main(){
//Open();
//Close();
while (~scanf("%d",&n) && n){
rep1(i,1,n)
scanf("%d%d%d%d",&a[i].v,&a[i].k,&a[i].c,&a[i].l);
sort(a+1,a+1+n,cmp);
sum[0] = 1;
rep1(i,1,n)
sum[i] = sum[i-1] + a[i].l;
ms(dp,INF);
dp[0] = 0,dp[1] = a[1].k + a[1].c*a[1].l;
rep1(i,2,n){
rep1(j,0,i-1)
dp[i] = min(dp[i],dp[j] + (sum[i]-sum[j])*a[i].c + a[i].k);
}
printf("%d\n",dp[n]);
}
return 0;
}
【Uva 11400】Lighting System Design的更多相关文章
- UVA - 11400 Lighting System Design
题文: You are given the task to design a lighting system for a huge conference hall. After doing a lot ...
- 【神仙DP】【UVa11400】Lighting System Design
传送门 Description Translation 题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L.注意到,电压相同的灯泡只需要共享一个 ...
- 【线性结构上的动态规划】UVa 11400 - Lighting System Design
Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the tas ...
- UVa 11400 Lighting System Design(DP 照明设计)
意甲冠军 地方照明系统设计 总共需要n不同类型的灯泡 然后进入 每个灯电压v 相应电压电源的价格k 每一个灯泡的价格c 须要这样的灯泡的数量l 电压低的灯泡能够用电压高的灯泡替换 ...
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- (动态规划)UVA-11400:Lighting System Design
You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 【UVa 116】Unidirectional TSP
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
随机推荐
- setUserVisibleHint的使用.执行顺序和viewPager.setOffscreenPageLimit(0)不管用还是默认会加载第二个fragment
处理问题一:viewPager.setOffscreenPageLimit(0)不管用还是默认会加载第二个fragment的原因(源码解读); 处理问题二:setUserVisibleHint的使用场 ...
- oc消息转发机制本质
第一级转发:主体不变,动态添加对应函数: 第二级转发:函数不变,切换接收主体: 第三极转发:函数签名不变,主体和函数都有可能变化: 1.使用函数的动态添加技术: 2.使用的类似is-a swzzing ...
- IDEA创建Maven项目显示一直加载中的问题
使用IDEA这款工具创建Maven项目的时候出现过下面这种情况: 红色区域即maven骨架加载不出来... 或 loading loading loading ... 有时候需要很长一段时间才能加载出 ...
- React 第一天
第一天 从webpack到babel再到React.js Vue是如何实现组件化的: 通过.vue文件,来创建对应的组件: ·template 结构 ·script 行为 ·style 样式 Reac ...
- web移动端-弹性盒模型
(父元素加) : /*新版弹性盒模型*/ /* display: flex; */ /*设置主轴方向为水平方向*/ /* flex-direction: row; */ /*设置主轴方向为垂直方向*/ ...
- Python ftplib 模块关于 ftp的下载
import ftplib import os import socket import sys HOST='192.168.216.193' DIRN='c:\\ftp\FTP.123' FILE= ...
- Oralce中的package和package body
1.Oracle Package的作用: 可以简化应用设计.提高应用性能.实现信息隐藏.子程序重载 2.ORACLE中的function .package.package bodies.pro ...
- Zookeeper入门-Linux环境下异常ConnectionLossException解决
实际项目开发中,用的是Linux环境. 中午突然断电,死活连不上Zookeeper,最终发现是需要关闭防火墙. 看日志,报错如下: Exception in thread "mai ...
- 在AutoLyout中动态获得cell的高度 和 autoLyout中的小随笔
autoLyout中动态获得cell的高度和autoLyout小总结 一.在autoLyout中通过动态的方式来获取cell 的方式呢? 1. 在布局时候要有对于cell中contentV ...
- linux搜索文件过程
1.文件里的数据是放在磁盘的数据区中的,而一个文件名称则是通过相应的i节点与这些磁盘块联系起来.这些盘块的号码就存放在i节点的逻辑块数组i_zone[]中.在文件系统的一个文件夹中,当中全部文件名称信 ...