1954【线性规划与网络流24题 19】负载平衡问题
来源:互联网 发布:蚁群算法公式解析 编辑:程序博客网 时间:2024/05/20 04:30
P1954【线性规划与网络流24题 19】负载平衡问题
时间限制 : 10000 MS 空间限制 : 65536 KB
问题描述
G公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使n个仓库的库存数量相同。
搬运货物时,只能在相邻的仓库之间搬运。
对于给定的n个环形排列的仓库的库存量,编程计算使n个仓库的库存数量相同的最少搬运量。
输入格式
第1行中有1个正整数n(n<=100),表示有n个仓库。第2行中有n个正整数,表示n个仓库的库存量。
输出格式
一个整数,表示最少搬运量
样例输入
5
17 9 14 16 4
样例输出
11
题解:
每个人之间连一条容量无限,距离为1的边;
注意他是一个环1与n要连一条边
#include<stdio.h>#include<algorithm>#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;#define inf 99999999#define maxn 805int n,sum,s,p;int cnt=1;int a[105];int path[maxn],p2[maxn];int Next[maxn],Last[maxn],End[maxn],con[maxn],Len[maxn];bool mark[maxn];int dis[maxn];int start=0,mincost;bool spfa(){ int i,x,y; queue<int>q; for(i=start;i<=n+1;i++) dis[i]=inf; memset(mark,false,sizeof(mark)); q.push(start); mark[start]=true; dis[start]=0; while(q.size()) { int x=q.front(); q.pop(); mark[x]=false; for(i=Last[x];i;i=Next[i]) { int en=End[i]; if(con[i]>0&&dis[en]>dis[x]+Len[i]) { dis[en]=dis[x]+Len[i]; path[en]=x; p2[en]=i; if(mark[en]==0){ q.push(en); mark[en]=true; } } } } if(dis[n+1]<inf) return true; else return false;}void insert(int x,int y,int z,int w){ cnt++; Next[cnt]=Last[x]; Last[x]=cnt; End[cnt]=y; Len[cnt]=w; con[cnt]=z;}void addflow(){ int flow=inf,cost=0,p=0; for(int i=n+1;i;i=path[i]) { p=p2[i]; flow=min(flow,con[p]); } mincost+=flow*dis[n+1]; for(int i=n+1;i;i=path[i]) { p=p2[i]; con[p]-=flow; con[p^1]+=flow; }}int main(){ int i,j,k; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]);sum+=a[i];} p=sum/n; for(i=1;i<=n;i++){ insert(0,i,a[i],0); insert(i,0,0,0); } for(i=1;i<=n-1;i++) { insert(i,i+1,inf,1); insert(i+1,i,0,-1); insert(i+1,i,inf,1); insert(i,i+1,0,-1); } insert(1,n,inf,1); insert(n,1,0,-1); insert(n,1,inf,1); insert(1,n,0,-1); for(i=1;i<=n;i++) { insert(i,n+1,p,0); insert(n+1,i,0,0); } while(spfa()) addflow(); cout<<mincost;}
阅读全文
0 0
- 线性规划与网络流24题 ---19 负载平衡问题
- 【线性规划与网络流24题 19】负载平衡问题
- 1954【线性规划与网络流24题 19】负载平衡问题
- 线性规划与网络流24题の19 负载平衡问题(最小费用最大流)
- 线性规划与网络流24——负载平衡问题
- 线性规划于网络流24题之负载平衡问题 最小费用最大流
- 【网络流24题】负载平衡问题
- [网络流24题]负载平衡问题
- 网络流24题 19负载平衡问题
- 负载平衡问题[网络流24题之19]
- 【线性规划与网络流24题 24】骑士共存问题
- 线性规划与网络流24题 02太空飞行计划问题
- 线性规划与网络流24题 04魔术球问题
- 线性规划与网络流24题 05圆桌问题
- 线性规划与网络流24题 07试题库问题
- 线性规划与网络流24题 10餐巾计划问题
- 线性规划与网络流24题 11航空路线问题
- 网络流与线性规划24题02太空飞行计划问题
- 安卓FragmentTabHost+Fragment+ViewPager+TabLayout仿今日头条
- 数据库系统概率学习攻略(第8组)
- CSS把边框 border变成内边框,就是不改变宽度高度
- 高通lcd调试总结
- Forking and executing process
- 1954【线性规划与网络流24题 19】负载平衡问题
- poj2676Sudoku
- 51nod 1163 最高的奖励 (贪心+优先队列/并查集)&& 1191 消灭兔子(贪心+优先队列维护) && 1475 建设国家 (思维枚举+优先队列)
- StateList资源
- caffe过程中的错误(二)
- 2017年7月 bug总结
- Apache ab性能测试
- ArrayList在多线程调用Add()添加元素时的下标越界问题(java.lang.ArrayIndexOutOfBoundsException)
- Machine learning : Regression with one variable