标准的费用流问题,关键在于巧妙地建模

一共有n个月份,源点设为0,汇点设为n+1

1.源点向所有月份连边,容量为正无穷,费用为该月进货的费用

2.每个月向下一个月连边,容量为仓库容量,费用为存货费用

3.每个月向汇点连边,容量为该月卖货的数量,费用为0(卖货不会产生费用)

用最小费用最大流求解即可

————————————————
版权声明:本文为CSDN博主「ynhnxn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/C_sat/article/details/123443008

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int INF=20000000,tot=1,n,ans=0;
4 int nex[1000],adj[1000],to[1000],cap[1000],cost[1000];
5 int d[60],que[2000000];
6 bool vis[1000];
7
8 void add(int u,int v,int w,int c){
9 nex[++tot]=adj[u];
10 adj[u]=tot;
11 to[tot]=v;
12 cap[tot]=w;
13 cost[tot]=c;
14 }
15
16 int SPFA(){//标准SPFA
17 int q1=0,q2=1;
18 que[1]=0;
19 for(int i=1;i<=n+1;i++) d[i]=INF,vis[i]=0;
20 while(q1<q2){
21 int x=que[++q1];
22 vis[x]=0;
23 for(int k=adj[x];k;k=nex[k]){
24 int y=to[k];
25 if(d[x]+cost[k]<d[y]&&cap[k]){
26 d[y]=d[x]+cost[k];
27 if(!vis[y]){
28 vis[y]=1;que[++q2]=y;
29 }
30 }
31 }
32 }
33 if(d[n+1]==INF) return 0;
34 for(int i=0;i<=n+1;i++){
35 if(d[i]!=INF) vis[i]=0;
36 }
37 return 1;
38 }
39
40 int dinic(int u,int fw){//标准dinic
41 if(u==n+1){
42 ans+=fw*d[n+1];
43 return fw;
44 }
45 vis[u]=1;
46 int rest=fw;
47 for(int i=adj[u];i&&rest;i=nex[i]){
48 int v=to[i];
49 if(!vis[v]&&d[v]==d[u]+cost[i]&&cap[i]>0){
50 int k=dinic(v,min(rest,cap[i]));
51 if(k){
52 rest-=k;
53 cap[i]-=k;
54 cap[i^1]+=k;
55 }
56 }
57 }
58 return fw-rest;
59 }
60
61 int main(){//源点为0,汇点为n+1
62 int x,m,s;
63 scanf("%d%d%d",&n,&m,&s);//月份数,存贮费,仓库容量
64 for(int i=1;i<=n;i++){
65 scanf("%d",&x);//需求量
66 add(i,n+1,x,0);
67 add(n+1,i,0,0);//每个月向汇点连边,容量为x,费用为0
68 if(i!=n) add(i,i+1,s,m),add(i+1,i,0,-m);//向下一个月连边,容量就是仓库容量s,费用是m
69 }
70 for(int i=1;i<=n;i++){
71 scanf("%d",&x);//订货单价
72 add(0,i,INF,x);
73 add(i,0,0,-x);//源点向每个月连边,容量为正无穷,费用为订货价格
74 }
75 while(SPFA()) dinic(0,INF);//最小费用最大流
76 cout<<ans;
77 }

洛谷P2517 HAOI2010 订货 (费用流)的更多相关文章

  1. BZOJ 2424: [HAOI2010]订货 费用流

    2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ...

  2. 【bzoj2424】[HAOI2010]订货 费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825296.html 题目描述 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di, ...

  3. 洛谷.4015.运输问题(SPFA费用流)

    题目链接 嗯..水题 洛谷这网络流二十四题的难度评价真神奇.. #include <queue> #include <cstdio> #include <cctype&g ...

  4. BZOJ2424 [HAOI2010]订货 - 费用流

    题解 (非常裸的费用流 题意有一点表明不清: 该月卖出的商品可以不用算进仓库里面. 然后套上费用流模板 代码 #include<cstring> #include<queue> ...

  5. 洛谷P4015 运输问题(费用流)

    传送门 源点向仓库连费用$0$,流量为储量的边,商店向汇点连费用$0$,流量为需求的边,然后仓库向商店连流量$inf$,费用对应的边,跑个费用流即可 //minamoto #include<io ...

  6. 洛谷P4014 分配问题(费用流)

    传送门 可以把原图看做一个二分图,人在左边,任务在右边,求一个带权的最大和最小完美匹配 然而我并不会二分图做法,所以只好直接用费用流套进去,求一个最小费用最大流和最大费用最大流即可 //minamot ...

  7. 洛谷 - P4452 - 航班安排 - 费用流

    https://www.luogu.org/problemnew/show/P4452 又一道看题解的费用流. 注意时间也影响节点,像题解那样建边就少很多了. #include<bits/std ...

  8. P2517 [HAOI2010]订货(dp)

    P2517 [HAOI2010]订货 设$f[i][j]$表示第$i$个月,库存为$j$的最小代价 枚举上个月的库存$k$,那么$f[i][j]=f[i-1][k]+(j+U[i]-k)*D[i]+j ...

  9. 洛谷.3381.[模板]最小费用最大流(zkw)

    题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...

随机推荐

  1. DTS搭载全新自研内核,突破两地三中心架构的关键技术|腾讯云数据库

    随着企业规模的扩大,对数据库可用性要求越来越高,更多企业采用两地三中心.异地多活的架构,以提高数据库的异常事件应对能力. 在数据库领域,我们常听的"两地三中心"."异地多 ...

  2. 标准的Switch语句和穿透的Switch语句

    第三章 选择语句 3.1选择语句--Switch switch语句格式: ```java switch(表达式){ case 常量值1: 语句体1; break; case 常量值2: 语句体2; b ...

  3. C++ 实现可变参数的三个方法

    有时我们无法提前预知应该向函数传递几个实参.例如,我们想要编写代码输出程序产生的错误信息,此时最好用同一个函数实现该项功能,以便对所有错误的处理能够整齐划一.然而,错误信息的种类不同,所以调用错误输出 ...

  4. Java学习第五周

    这周学习了异常与多线程,线程使用 Exception异常的分类: 1.编译时异常:继承自Exception的异常或者其子类,编译阶段就会报错 2.运行时异常:继承自RuntimeException的异 ...

  5. 为你的网站加上live2d的动态小挂件,博君一晒

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_122 喜欢二次元的朋友一定对大名鼎鼎的live2d技术并不陌生,live2D是一种应用于电子游戏的绘图渲染技术,技术由日本Cybe ...

  6. PostgreSQL 备份

    # WAL日志: # 我们对数据库的增删改查创建之前先是将sql语句记录在WAL日志中, # 只有日志记录刷新到磁盘后,才能写入数据库文件. # 遵从这个过程,不需要在每个事务提交时都刷新数据页到数据 ...

  7. Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  8. C 语言 时间函数使用技巧(汇总)

    time.h 头文件 是 C 语言中 有关 时间的函数所储存的头文件 #include <time.h> 在介绍时间函数用法之前,我们首先要了解在 time.h 头文件中已经声明了的一个结 ...

  9. Python 中MATLABspline函数的替代函数

    调用scipy模块,其中有对应的函数UnivariateSpline.与MATLAB中spline函数不同的是,这个函数返回值是一个插值函数,而非插值结果. import scipy spline = ...

  10. mybatis 07: sql标签中 "#{}" 和 "${}" 的作用和比较

    "#{}"占位符 作用 传参大部分使用"#{}",在数据库底层使用的是:PreparedStatement预编译处理对象 数据库底层被解析为"?&qu ...