zoukankan      html  css  js  c++  java
  • 【网络流24题】餐巾计划问题(费用流)

    【网络流24题】餐巾计划问题

    题目描述 Description

    一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同。假设第 i 天需要 ri块餐巾(i=1,2,…,N)。餐厅可以购买新的餐巾,每块餐巾的费用为 p 分;或者把旧餐巾送到快洗部,洗一块需 m 天,其费用为 f 分;或者送到慢洗部,洗一块需 n 天(n>m),其费用为 s<f 分。
    每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。但是每天洗好的餐巾和购买的新餐巾数之和,要满足当天的需求量。
    试设计一个算法为餐厅合理地安排好 N 天中餐巾使用计划,使总的花费最小。
    编程找出一个最佳餐巾使用计划.

    输入描述 Input Description

    第 1 行有 6 个正整数 N,p,m,f,n,s。N 是要安排餐巾使用计划的天数;p 是每块新餐巾的费用;m 是快洗部洗一块餐巾需用天数;f 是快洗部洗一块餐巾需要的费用;n 是慢洗部洗一块餐巾需用天数;s 是慢洗部洗一块餐巾需要的费用。接下来的 N 行是餐厅在相继的 N 天里,每天需用的餐巾数。

    输出描述 Output Description

    将餐厅在相继的 N 天里使用餐巾的最小总花费输出

    样例输入 Sample Input

    3 10 2 3 3 2

    5

    6

    7

    样例输出 Sample Output

    145

    这道题目是十分巧妙的,巧妙在于建图,这里是必须要满足所有每天都有一定量的餐巾纸数

    我现在的水平,不至于会想网络流的方向去思考,这道题目连数据范围都没有,。。。无语。

    答案是:

    建一个S,T,Xi表示当天用完后剩下这么多餐巾纸,Yi表示当天需要这么多餐巾纸。

    S向Xi,连一条为ri的边,不需要花费,Yi向T连一条ri的边,不需要花费,

    S向Yi,连一条无限流量的边,花费为p,表示花p的钱可以买。

    Xi可以连到Yi+m,Yi+n,花费分别为f,s。

    Xi向Xi+1连一条流量无限,花费为0的边

    这里就是所有的构图。

    正确性证明:

    要保证每天都有那么多餐巾纸,是不是需要保证都满流,因为S向Yi,连一条无限流量的边,花费为p,表示花p的钱可以买。

    所以都是可以满足的。

    对于没有快洗,慢洗的情况,首先,当天剩下的是不是绝对有ri,然后可以从前几天剩下的加起来。

    然后就是送去到Yi那边,继续可以流,是不是简单易懂!!!

  • 相关阅读:
    java常用英文解释
    干货——myeclipse快捷键
    上海面试经常遇到的事务安全问题
    2016java技术岗面试题
    Echarts 获取后台数据 使用后台数据展示 柱形图
    JS实现的MAP结构数据
    Spring MVC 返回json数据 报406错误 问题解决方案
    junit 注意事项,切记
    JNDI中 java:comp/env 的理解
    JMS发布/订阅消息传送例子
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/7930066.html
Copyright © 2011-2022 走看看