BZOJ 1221: [HNOI2001] 软件开发
1221: [HNOI2001] 软件开发
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1428 Solved: 791
[Submit][Status][Discuss]
Description
某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A种方式的消毒需要a天时间,B种方式的消毒需要b天(b>a),A种消毒方式的费用为每块毛巾fA, B种消毒方式的费用为每块毛巾fB,而买一块新毛巾的费用为f(新毛巾是已消毒的,当天可以使用);而且f>fA>fB。公司经理正在规划在这n天中,每天买多少块新毛巾、每天送多少块毛巾进行A种消毒和每天送多少块毛巾进行B种消毒。当然,公司经理希望费用最低。你的任务就是:为该软件公司计划每天买多少块毛巾、每天多少块毛巾进行A种消毒和多少毛巾进行B种消毒,使公司在这项n天的软件开发中,提供毛巾服务的总费用最低。
Input
第1行为n,a,b,f,fA,fB. 第2行为n1,n2,……,nn. (注:1≤f,fA,fB≤60,1≤n≤1000)
Output
最少费用
Sample Input
8 2 1 6
Sample Output
HINT
Source
最小费用最大流,各种调代码。
把每一天拆点,分为Xi和Yi。可以理解X为未消毒,Y为已消毒。
源点向Xi供应Ni个费用为0的流量,代表每天产生的用过的毛巾。
Yi向汇点连容量Ni的费用为0的边,代表每天使用的毛巾。
源点向Yi连费用为F的边,容量无穷,代表可以新购毛巾。
Xi向Yi+A+1连费用为Fa的边,代表可以在i时送去消毒,i+A+1时使用;B同理。
Xi向Xi+1连边,代表今天的脏毛巾可以留着回头再拿来洗。
- #include <bits/stdc++.h>
- inline int get_c(void)
- {
- static const int siz = ;
- static char buf[siz];
- static char *head = buf + siz;
- static char *tail = buf + siz;
- if (head == tail)
- fread(head = buf, , siz, stdin);
- return *head++;
- }
- inline int get_i(void)
- {
- register int ret = ;
- register int neg = false;
- register int bit = get_c();
- for (; bit < ; bit = get_c())
- if (bit == '-')neg ^= true;
- for (; bit > ; bit = get_c())
- ret = ret * + bit - ;
- return neg ? -ret : ret;
- }
- const int inf = 2e9;
- const int maxn = ;
- int n, a, b, f, c, d;
- int s, t;
- int edges;
- int hd[maxn];
- int to[maxn];
- int fl[maxn];
- int vl[maxn];
- int nt[maxn];
- inline void add(int u, int v, int f, int w) {
- nt[edges] = hd[u]; to[edges] = v; fl[edges] = f; vl[edges] = +w; hd[u] = edges++;
- nt[edges] = hd[v]; to[edges] = u; fl[edges] = ; vl[edges] = -w; hd[v] = edges++;
- }
- int dis[maxn];
- int pre[maxn];
- inline bool bfs(void) {
- static int que[maxn];
- static int inq[maxn];
- static int head, tail;
- for (int i = s; i <= t; ++i)dis[i] = inf;
- memset(inq, , sizeof(inq));
- que[tail++] = s;
- pre[s] = -;
- dis[s] = ;
- inq[s] = ;
- while (head != tail) {
- int u = que[head++], v; inq[u] = ;
- if (head == maxn)head = ;
- for (int i = hd[u]; ~i; i = nt[i])
- if (fl[i] && dis[v = to[i]] > dis[u] + vl[i]) {
- dis[v] = dis[u] + vl[i];
- pre[v] = i ^ ;
- if (!inq[v]) {
- inq[que[tail++] = v];
- if (tail == maxn)
- tail = ;
- }
- }
- }
- return dis[t] < inf;
- }
- inline int minCost(void) {
- int cost = ;
- while (bfs()) {
- int flow = inf;
- for (int i = pre[t]; ~i; i = pre[to[i]])
- flow = std::min(flow, fl[i ^ ]);
- for (int i = pre[t]; ~i; i = pre[to[i]])
- fl[i] += flow, fl[i ^ ] -= flow;
- cost += flow * dis[t];
- }
- return cost;
- }
- signed main(void)
- {
- memset(hd, -, sizeof(hd));
- n = get_i();
- a = get_i();
- b = get_i();
- f = get_i();
- c = get_i();
- d = get_i();
- s = , t = (n + ) * + ;
- for (int i = ; i <= n; ++i) {
- int x = get_i();
- add(s, i, x, );
- add(i + n, t, x, );
- add(s, i + n, inf, f);
- if (i + <= n)
- add(i, i + , inf, );
- if (i + a + <= n)
- add(i, i + a + + n, inf, c);
- if (i + b + <= n)
- add(i, i + b + + n, inf, d);
- }
- printf("%d\n", minCost());
- }
@Author: YouSiki
BZOJ 1221: [HNOI2001] 软件开发的更多相关文章
- BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发
3280: 小R的烦恼 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 399 Solved: 200[Submit][Status][Discuss ...
- BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...
- bzoj 1221 [HNOI2001] 软件开发 费用流
[HNOI2001] 软件开发 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1938 Solved: 1118[Submit][Status][D ...
- [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】
题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...
- BZOJ 1221: [HNOI2001] 软件开发【最小费用最大流】
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...
- BZOJ 1221 [HNOI2001] 软件开发 费用流_建模
题目描述: 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供 ...
- BZOJ 1221 [HNOI2001] 软件开发(费用流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1221 [题目大意] 每天对毛巾都有一定的需求ni,每天可以花f价值每条购买毛巾, 当天 ...
- bzoj 1221: [HNOI2001] 软件开发 (网络流)
注意说如果直接从每天的新的连向旧的,那整个图的最大流还是不变,答案就一直会是Σni*f type arr=record toward,next,cap,cost:longint; end; const ...
- 【BZOJ 1221】 1221: [HNOI2001] 软件开发 (最小费用流)
1221: [HNOI2001] 软件开发 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1581 Solved: 891 Description ...
随机推荐
- php实现设计模式之 状态模式
<?php /*状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.(行为模式) * * 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做 ...
- JDBC介绍
1.DriverManager用来建立和数据库的链接以及管理JDBC驱动程序 driverManager的常用方法 方法 描述 registerDriver(Driver driver) 在Derve ...
- java基础2.-------interface接口类,实现接口
1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动 ...
- input文本框录入字母自动大写
向文本框输入文字时,如何让小写字母自动变为大写呢?有一个简单有效的做法是用CSS. <input name="t1" type="text" style= ...
- safari cookie设置中文失败
最近用H5进行手机端开发,由于是window操作系统,为了方便开发和调试,直接在chrome浏览器上进行测试,然后在android机上进行手机端测试,当功能基本完工后,原来在android上运行正常的 ...
- 关于XHR对象中status范围的记录
if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ // 成功执行区域 // 2XX表示有效响应 ...
- javascript的defer和async的区别。
我们常用的script标签,有两个和性能.js文件下载执行相关的属性:defer和async defer的含义[摘自https://developer.mozilla.org/En/HTML/Elem ...
- 北京54全国80及WGS84坐标系的相互转换
这三个坐标系统是当前国内较为常用的,它们均采用不同的椭球基准.其中北京54坐标系,属三心坐标系,大地原点在苏联的普而科沃,长轴6378245m,短轴6356863,扁率1/298.3:西安80坐标系, ...
- ArcGIS Engine开发之地图基本操作(3)
地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...
- 聊天气泡 button backgroundImage uiimage 拉伸 stretchableImageWithLeftCapWidth: 方法的使用
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...