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

4 1 2 3 2 1
8 2 1 6

Sample Output

38

HINT

 

Source

 

[Submit][Status][Discuss]

最小费用最大流,各种调代码。

把每一天拆点,分为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] 软件开发的更多相关文章

  1. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  2. BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)

    不知道为什么这么慢.... 费用流,拆点.... --------------------------------------------------------------------------- ...

  3. bzoj 1221 [HNOI2001] 软件开发 费用流

    [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1938  Solved: 1118[Submit][Status][D ...

  4. [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】

    题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...

  5. BZOJ 1221: [HNOI2001] 软件开发【最小费用最大流】

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  6. BZOJ 1221 [HNOI2001] 软件开发 费用流_建模

    题目描述:   某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供 ...

  7. BZOJ 1221 [HNOI2001] 软件开发(费用流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1221 [题目大意] 每天对毛巾都有一定的需求ni,每天可以花f价值每条购买毛巾, 当天 ...

  8. bzoj 1221: [HNOI2001] 软件开发 (网络流)

    注意说如果直接从每天的新的连向旧的,那整个图的最大流还是不变,答案就一直会是Σni*f type arr=record toward,next,cap,cost:longint; end; const ...

  9. 【BZOJ 1221】 1221: [HNOI2001] 软件开发 (最小费用流)

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1581  Solved: 891 Description ...

随机推荐

  1. 【夯实PHP基础】PHP的反射机制

    本文地址 分享提纲: 1. 介绍 2. 具体例子 2.1 创建Persion类 2.2 反射过程 2.3 反射后使用 1. 介绍 -- PHP5添加了一项新的功能:Reflection.这个功能使得p ...

  2. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  3. GJM : Unity3D HIAR -【 快速入门 】 六、导出 iOS 工程

    导出 iOS 工程 在开始之前,请务必先保存您的工程.由于 Unity 无法直接生成 ipa 文件,您需要先导出 iOS 工程文件,然后通过 Xcode 编译生成. Step 1. 选择平台 在 Un ...

  4. 微信小程序的认识和开发适用性

    来源:三节课课堂笔记 小程序认知 初识小程序.   目前微信小程序包括各类公众号接口的情况:   那么微信拥有的功能产品和对应的互联网产品有哪些:   小程序相当于AppStore应用分发市场:   ...

  5. BranchCache在sharepoint2013使用

    BranchCache 是 Windows 7.Windows 8.Windows Server 2008 R2 和 Windows Server 2012 操作系统的一项功能,此功能可在本地分支机构 ...

  6. Atitit.安全性方案规划设计4gm  v1 q928

    Atitit.安全性方案规划设计4gm  v1 q928 1. 安全架构设计与功能安全检测1 2. https1 3. 账号安全体系1 4. 配置文件安全 1 5. 源码加密与安全2 6. 最高强度的 ...

  7. 原创炫酷代码公开——连接董铂然github

    公开了github部分项目(均为原创)更多代码请看https://github.com/dsxNiubility SXWaveAnimate Wonderful SXPhotoShow SXNews ...

  8. 【转】Android SDK Samples,学习Android的好方法

    转载地址:http://blog.csdn.net/rowland001/article/details/50886288 从今天开始呢,我要开始学习Google家自己出的Android代码示例,总觉 ...

  9. UINavigationBar 和view 重叠覆盖问题

    如果没有是storyboard进行界面设计,在ios7之后会遇到rootviewcontroller的view被navigationbar遮盖的问题,其实很好解决 - (void)viewDidLoa ...

  10. 在VMware上安装VMTools

    1. 什么是VMtools VM tools顾名思义就是Vmware的一组工具(关于如何在虚拟机上安装Linux,可以参考我之前的博文:http://www.cnblogs.com/libingbin ...