题目描述

某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的 服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A种方式的消毒需要 a天时间,B种方式的消毒需要b天(b>a),A种消毒方式的费用为每块毛巾fA, B种消毒方式的费用为每块毛巾fB,而买一块新毛巾的费用为f(新毛巾是已消毒的,当天可以使用);而且f>fA>fB。公司经理正在规划在 这n天中,每天买多少块新毛巾、每天送多少块毛巾进行A种消毒和每天送多少块毛巾进行B种消毒。当然,公司经理希望费用最低。

你的任务就是:为该软件公司计划每天买多少块毛巾、每天多少块毛巾进行A种消毒和多少毛巾进行B种消毒,使公司在这项n天的软件开发中,提供毛巾服务的总费用最低。

输入输出格式

输入格式:

第1行为n,a,b,f,fA,fB.

第2行为n1,n2,……,nn. (注:1≤f,fA,fB≤60,1≤n≤1000)

输出格式:

最少费用

输入输出样例

输入样例#1:
复制

4  1  2  3  2  1
8  2  1  6
输出样例#1: 复制

38

建立附加源点和汇点S和T


1. 源点到第i天的入点连容量ni费用为0的边


2. 第i天的出点到汇点连容量ni费用为0的边


3. 源点到第i天的出点连容量为INF费用为f的边


4. 第i天的入点到第i+a+1(i+b+1)天的出点连容量为INF费用为fa(fb)的边


5. 第i天的入点到第i+1天的入点连容量为INF费用为0的边

S连出的边表示这一天会剩下ni个脏布,连向T表示这一天要用ni个布

一天用完的ni个布,可以由a(b)方式给第i+a+1(i+b+1)天,也可以不洗,留到下一天再洗

 #include<iostream>
 #include<cstdio>
 #include<cstring>
 #include<algorithm>
 #include<queue>
 using namespace std;
 struct Node
 {
     int next,to,c,dis,u;
 }edge[];
 ,head[],inf=2e9,dis[],pre[];
 long long ans;
 ],n,a,b,fa,fb,f;
 ];
 void add(int u,int v,int c,int d)
 {
     num++;
     edge[num].next=head[u];
     head[u]=num;
     edge[num].to=v;
     edge[num].dis=d;
     edge[num].c=c;
     edge[num].u=u;
     num++;
     edge[num].next=head[v];
     head[v]=num;
     edge[num].to=u;
     edge[num].dis=-d;
     edge[num].c=;
     edge[num].u=v;
 }
 bool SPFA()
 {int INF,i;
     memset(pre,-,sizeof(pre));
     memset(vis,,sizeof(vis));
     memset(dis,/,sizeof(dis));
     INF=dis[];
     dis[]=;
     queue<int>Q;
     Q.push();
     )
     {
         int u=Q.front();
         Q.pop();
         vis[u]=;
         for (i=head[u];i;i=edge[i].next)
         {
             int v=edge[i].to;
             if (edge[i].c&&dis[v]>dis[u]+edge[i].dis)
             {
                 dis[v]=dis[u]+edge[i].dis;
                 pre[v]=i;
                 )
                 {
                     vis[v]=;
                     Q.push(v);
                 }
             }
         }
     }
     *n+]==INF) ;
     ;
 }
 void change()
 {int i;
     *n+;
         int minf=inf;
         ;i=pre[edge[i].u])
         {
             minf=min(minf,edge[i].c);
         }
         ;i=pre[edge[i].u])
         {
             edge[i].c-=minf;
             edge[i^].c+=minf;
         }
     ans+=minf*dis[T];
 }
 int main()
 {int i;
     cin>>n>>a>>b>>f>>fa>>fb;
     ;i<=n;i++)
     scanf("%d",&d[i]);
     ;i<=n;i++)
     add(,i,d[i],),add(i+n,*n+,d[i],),add(,i+n,inf,f);
     ;i<=n-;i++)
     add(i,i+,inf,);
     ;i<=n;i++)
     {
         <=n) add(i,i+a++n,inf,fa);
         <=n) add(i,i+b++n,inf,fb);
     }
     while (SPFA()) change();
     cout<<ans;
 }

[HNOI2001]软件开发的更多相关文章

  1. BZOJ 1221: [HNOI2001] 软件开发

    1221: [HNOI2001] 软件开发 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1428  Solved: 791[Submit][Stat ...

  2. bzoj1221: [HNOI2001] 软件开发

    挖坑.我的那种建图方式应该也是合理的.然后连样例都过不了.果断意识到应该为神奇建图法... #include<cstdio> #include<cstring> #includ ...

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

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

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

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

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

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

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

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

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=1221 先吐槽一下,数组依旧开小了RE:在spfa中用了memset和<queue>的版本 ...

  8. 1221. [HNOI2001]软件开发【费用流】

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

  9. 【bzoj1221】[HNOI2001] 软件开发 费用流

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

随机推荐

  1. Generator库co4.6使用及源码分析

    原文链接 http://www.cnblogs.com/ytu2010dt/p/6043947.html co4.x已经抛弃了原来thunk转而结合promise实现. 一:promise proms ...

  2. Android自动化测试 - Robotium之re-sign.jar重签名后安装失败提示Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]解决方案

    问题:在用re-sign.jar重签名apk文件后,显示重签名成功,但在实际安装过程中确提示:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 原因:网上查 ...

  3. Leetcode Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  4. Verilog学习笔记设计和验证篇(一)...............总线和流水线

    总线 总线是运算部件之间数据流通的公共通道.在硬线逻辑构成的运算电路中只要电路的规模允许可以比较自由的确定总线的位宽,从而大大的提高数据流通的速度.各个运算部件和数据寄存器组可以通过带有控制端的三态门 ...

  5. jTemplate —— 基于jQuery的javascript前台模版引擎

    reference: http://blog.csdn.net/lexinquan/article/details/6674102     http://blog.csdn.net/kuyuyingz ...

  6. requirejs 小结

    1,“生搬硬套”-----js依赖的写法,依赖关系如这里的嵌套关系: /** * 模块化加载,注意各个js文件的依赖关系(嵌套) */ require(["jquery"], fu ...

  7. Coursera获取中文字幕(如果有的话)

    字幕的格式是  https://class.coursera.org/${课程代号}/lecture/subtitles?q=${视频编号}_zh-cn 例如 https://class.course ...

  8. 【Git】时光机命令—Git命令

    cd c:    进入C盘 mkdir learngit          创建名为learngit的文件夹 cd learngit  进入learngit文件夹 pwd    显示当前目录路径 gi ...

  9. Java工具之上传文件

    4个代码 1.前端JSP 2.自定义异常类 3.文件上传抽象类 4.Servlet 1.JSP <%@ page contentType="text/html;charset=UTF- ...

  10. 在Eclipse中使用Junit进行单元测试

    单元测试与Junit4 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离 ...