题面

题意

给出每一个月的商品需求量和每一个月的生产成本以及仓库容量和贮存费用(每月,与贮存货物的量无关),问最小成本.

分析

一开始没有想到用费用流去做,且难以建图,但将名词转化一下即可
将货物的量当做流量,成本当做费用,先建一个超级源点(可以理解为工厂),连向每一个月的节点,因为生产数量无限制,故流量为INF,费用为成本,再建一个超级汇点(理解为客户),每一个月的节点连向它,流量为需求量,费用为0,再将相连两月连接,流量为仓库流量,费用为贮存费,跑一遍费用流即可.

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define INF 0x3f3f3f3f
#define N 110
#define M 1010
using namespace std;int n,m,V,first[N],bb=1,s=0,t,ans,d[N],last[N],B[N];
bool in[N];
struct Bn
{int to,next,quan,cst;
}bn[M];
queue<int>que;inline void add(int u,int v,int w,int z)
{bb++;bn[bb].to=v;bn[bb].quan=w;bn[bb].cst=z;bn[bb].next=first[u];first[u]=bb;
}int dfs(int now,int mn)
{if(now==s)return mn;int res;res=dfs(last[now],min(bn[B[now]].quan,mn));bn[B[now]].quan-=res;bn[B[now]^1].quan+=res;return res;
}inline void bfs()
{int p,q;for(;!que.empty();que.pop());memset(d,INF,sizeof(d));memset(in,0,sizeof(in));que.push(s);d[s]=0;for(;!que.empty();){q=que.front();que.pop();in[q]=0;for(p=first[q];p!=-1;p=bn[p].next){if(d[bn[p].to]<=d[q]+bn[p].cst||!bn[p].quan) continue;d[bn[p].to]=d[q]+bn[p].cst;last[bn[p].to]=q;B[bn[p].to]=p;if(!in[bn[p].to]){in[bn[p].to]=1;que.push(bn[p].to);}}}if(d[t]==INF) return;ans+=d[t]*dfs(t,INF);bfs();
}int main()
{memset(first,-1,sizeof(first));int i,j,p,q;cin>>n>>m>>V;t=n+1;for(i=1;i<=n;i++){scanf("%d",&p);add(i,t,p,0);add(t,i,0,0);}for(i=1;i<=n;i++){scanf("%d",&p);add(s,i,INF,p);add(i,s,0,-p);}for(i=1;i<n;i++){add(i,i+1,V,m);add(i+1,i,0,-m);}bfs();cout<<ans;
}

洛谷 P2517 [HAOI2010]订货相关推荐

  1. 洛谷 P2515 [HAOI2010]软件安装 解题报告

    P2515 [HAOI2010]软件安装 题目描述 现在我们的手头有\(N\)个软件,对于一个软件\(i\),它要占用\(W_i\)的磁盘空间,它的价值为\(V_i\).我们希望从中选择一些软件安装到 ...

  2. P2517 [HAOI2010]订货 (最小费用最大流)

    传送门 裸题,当水博客用的) 由源点向每个月连容量为 i n f inf inf,费用为订货单价的边,表示每月的订购产品. 每个月向汇点连容量为当月需求量,费用为 0 0 0 的边,表示当月卖出. 同 ...

  3. 洛谷P2518 [HAOI2010]计数

    题目描述 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. ...

  4. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  5. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  6. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  7. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

  8. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  9. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

最新文章

  1. 基于Java语言构建区块链(六)—— 交易(Merkle Tree)
  2. java web定义数组_Java基础之数组--数组常用操作
  3. 安卓手机玩游戏卡顿怎么解决_手机卡顿怎么办?教你3个实用解决方法,两分钟解决卡顿难题!...
  4. ARC114E - Paper Cutting 2(组合数学,概率与期望)
  5. team网卡配置_主流服务器网卡Teaming模式配置(上)
  6. MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题
  7. python基础30个常用代码-30 个Python代码实现的常用功能,精心整理版
  8. 分布式存储系统学习笔记(二)—分布式文件系统(3)—Facebook文件系统(Haystack)
  9. 持久层框架 -Xxmm.Net
  10. 一拳超人手游显示服务器断开,一拳超人最强之男游戏无法登陆怎么办 解决方案一览...
  11. onenote无法同步的原因E0000007 b4lka
  12. APP上传照片后台实现方法
  13. Leetcode 853 车队
  14. Windows 无法使用内置管理员账户打开IE
  15. python工具包--Pandas
  16. 【计算机基础】 --- LSB、MSB与大/小端字节序
  17. 网络舆情信息传播动态监测查询方法
  18. 敏捷个人2012.5月份户外活动报道:0费用京郊经典户外路线【京西古道】
  19. 创新驱动国产介入医疗设备崛起 唯迈医疗携极光平板DSA亮相新疆介入放射学年会
  20. 团队建设管理培训PPT模板

热门文章

  1. 30行python代码实现微信自动陪女盆友聊天(itchat-uos + 无限制调用)
  2. IDEA 程序包不存在,找不到符号但是明明存在对应的jar包 的解决方案
  3. TDengine RESTful 客户端
  4. 支付宝 app接口对接流程上
  5. python xlutils模块安装_python接口测试,第三方包xlrd和xlutils,怎么安装
  6. 【华为云】磁盘挂载操作
  7. 据说是“缓存之王”? Caffeine高性能设计剖析
  8. 强大的安全工具 杀毒软件小红伞试用测评
  9. android分区卸载命令行,Android ADB命令 将apk安装到系统应用及删除方法
  10. su切换特别慢 linux,秋明 | 系统su切换用户时间非常长