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

一共有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. Linux—文件系统结构

    1.文件目录结构 /:是Linux系统的根目录 /bin:存放用户经常使用的命令 /boot:启动加载程序的静态文件 /dev:设备文件目录,不能单独分区 /etc:系统配置文件目录 /home:普通 ...

  2. YII学习总结3(session)

    session操作 <?php namespace app\controllers; use yii\web\Controller; class HelloController extends ...

  3. Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射。

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

  4. Excel 统计函数(四):AVERAGEIF 和 AVERAGEIFS

    AVERAGEIF [语法]AVERAGEIF(range, criteria, [average_range]) [参数] range:要计算平均值的一个或多个单元格: criteria:筛选条件: ...

  5. 检查原生 JavaScript 函数是否被覆盖

    你如何确定一个JavaScript原生函数是否被覆盖? 你不能--或者至少无法可靠地确定.有一些检测方法很接近,但你不能完全相信它们. JavaScript原生函数 在JavaScript中,原生函数 ...

  6. Linus命令

    参考: https://blog.csdn.net/weixin_44191814/article/details/120091363 vim编辑器 ## Vim基本模式 [对文件进行操作]vim 文 ...

  7. 7个技巧让你写出干净的 TSX 代码

    原文链接:https://dev.to/ruppysuppy/7-tips-for-clean-react-typescript-code-you-must-know-2da2 "干净的代码 ...

  8. Python入门系列(八)日期时间、数学、json

    日期时间 Python中的日期本身不是数据类型,但我们可以导入一个名为datetime的模块,将日期作为日期对象使用. import datetime x = datetime.datetime.no ...

  9. 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成微服务客户端)

    版本说明: 因为之前有了Taurus.MVC-DotNet 版本框架,因此框架标了-Java后缀. .Net  版本: 开源文章:开源:Taurus.MVC-DotNet 版本框架 (支持.NET C ...

  10. git cherry-pick 总结

    git cherry-pick cherry-pick : 精心挑选,挑选一个我们需要的 commit 进行操作.它可以用于将在其他分支上的 commit 移植到当前的分支. 用法: // 复制com ...