洛谷P4016

题解:洛谷 P4016 负载平衡问题 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使。个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。一行一个非负整数,输出最少搬运量。本文分享的必刷题目是从。#普及+# #贪心# 阅读详情

题目标签写着网络流诶….那么问题就是如何建图了…看到题解里一波大神用平均值来计算…但是蒟蒻没想到诶…所有我就比较暴力了….
对于每个点一拆为二(ia,ib),建立超源超汇,然后对于每个点,从源点s向其连一条容量为c[i],费用为0的边,从ia向ib连一条容量为无限,费用为0 的边(因为可以不停的把别的地方的货物搬到ia,然后从ib搬到下一个点去,ia到ib搬运当然是不用钱的),然后从ib向汇点t连一条容量为目标值也就是平均值的边,费用为0.
同时,每个点的ib向他的前后相邻的点连边,也就是ib向(i-1)a连容量为无穷,费用为1的边,向(i+1)a同样也是如此。
这样,我们在跑最小费用流的时候就可以保证每个点i原有的在avg以下的容量不会搬到别的点去(毕竟从s到t费用为0呢),而不满足的部分一定会搬去别的点或者从别的点搬过来,那么搬的过程自然就会产生相应的费用。
如图:
这里写图片描述
代码:

#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
struct edge{
    int to,cap,cost,rev;//终点,容量,费用,反向边
};
vector<edge>G[5010];
int dis[5010],prevv[5010],preve[5010],n,m,s,t,flow=0,cost=0;//最短路中前驱节点和对应的边
bool inque[5010];
void add(int from,int to,int cap,int cost)
{
    G[from].push_back(edge{to,cap,cost,(int)G[to].size()});
    G[to].push_back(edge{from,0,-cost,(int)G[from].size()-1});//注意反向边的加法!!-cost和cap=0!!
}
bool spfa(int s,int t)
{
    memset(dis,0x3f, sizeof(dis));memset(inque,0,sizeof(inque));
    queue<int>que;que.push(s);dis[s]=0;
    while(!que.empty()){
        int t=que.front();que.pop();inque[t]=false;
        for(int i=0;i<G[t].size();i++){
            edge e=G[t][i];
            if(e.cap&&dis[e.to]>dis[t]+e.cost){
                dis[e.to]=dis[t]+e.cost;
                prevv[e.to]=t;preve[e.to]=i;
                if(!inque[e.to]){
                    que.push(e.to);inque[e.to]=true;
                }
            }
        }
    }
    if(dis[t]==0x3f3f3f3f)
        return false;
    int d=0x7f7f7f7f;
    for(int v=t;v!=s;v=prevv[v])
        d=min(d,G[prevv[v]][preve[v]].cap);//全最短路中的最小流量限制就是本次总的流量限制
    flow+=d;cost+=d*dis[t];
    for(int v=t;v!=s;v=prevv[v]){
        edge&e=G[prevv[v]][preve[v]];//更新路径信息
        e.cap-=d;
        G[e.to][e.rev].cap+=d;
    }
    return true;
}
void mincostmaxflow(int s,int t)
{
    while(spfa(s,t));
}
int main()
{
    int n,i,j,k;
    int  c[105];
    cin>>n;int avg=0;
    for(i=1;i<=n;i++) {
        cin >> c[i], add(i, i + 200, 1 << 30, 0);
        add(0, i, c[i], 0);avg+=c[i];
    }
    avg/=n;
    for(i=1;i<=n;i++){
        add(i+200,500,avg,0);
        if(i!=n)
            add(i+200,i+1,1<<30,1);
        else
            add(i+200,1,1<<30,1);
        if(i!=1)
            add(i+200,i-1,1<<30,1);
        else
            add(i+200,n,1<<30,1);
    }
    mincostmaxflow(0,500);
    cout<<cost<<endl;

    return 0;
}

与hzwer大神的程序对拍500组无异233:
这里写图片描述

PS:仔细想了想好像每个点其实也没必要一拆为二,不拆点然后按之前所述建图应该也是OK的。

mmdetection 实战:基于Mask R-CNN与自定义COCO数据集的目标检测全流程解析 本文详细解析了如何使用mmdetection框架和Mask R-CNN模型,基于自定义COCO数据集完成目标检测任务的全流程。内容涵盖环境搭建、数据格式转换、配置文件定制化、模型训练与评估等核心步骤,并提供了针对工业缺陷检测场景的实用调优思路与避坑指南,帮助开发者高效构建高性能检测模型。 阅读详情

相关推荐

保姆级教程:用Ansys Workbench找出BGA焊点最容易坏的位置(附热循环+振动分析)

本文提供了一份详细的Ansys Workbench教程,指导如何通过热循环和振动分析找出BGA焊点最容易失效的位置。从模型搭建、材料定义到网格划分和载荷设置,全面解析了BGA焊点可靠性分析的全流程,帮助工程师提前预防焊点开裂问题,提升电子封装设计的可靠性。

weixin_30983965的博客 417

洛谷P4016:负载平衡问题

问题描述       有一个由n个沿环形铁路分布的仓库,每个仓库有一定的货物,某一个仓库可以往两边的仓库运送货物,求使n个仓库货物相等时的最小运输量。 怎么做?       这道题有很多做法,有贪心的,有二分的,有网络流的,其他的算法相信同学们可以在其他的题解上看到,所以在这里主要讲一下网络流的做法。其实这是一道最小费用最大流的很好的题。 解法       我们以一批货物从原始仓

Deep_Kevin的娱乐空间 519

聚类分析之——Kmeans算法(一)

原创地址:http://www.toutiao.com/i6399454239554273794/ 聚类分析是一种静态数据分析方法,常被用于数据挖掘、机器学习、模式识别等领域,聚类是一种无监督式的学习方法。它是在未知样本类别的情况下,通过计算样本彼此间的距离(欧式距离,马式距离,汉明距离,余弦距离等)来估计样本所属类别。从结构性来划分,聚类方法分为自上而下和自下而上两种方法。聚类的算法有很多

june2017的博客 3530

P4016 负载平衡问题(MCMF)

MCMF

Harris-H的博客 610

HEVC/VVC中R-Lambda码率控制算法原理

文章目录1. 比特分配1.1 GOP级比特分配1.2 帧级比特分配1.3 LCU级比特分配2. 码率控制2.1 λ的计算和更新2.2 参数QP的确定 VVC中码率控制算法沿用了HEVC中经典的R-λ码率控制模型,R-λ由中科大的李斌博士提出(详情参考JCTVC-K0103)。R-λ模型的基础为视频编码中 R(比特 bpp)和 D(失真 MSE)之间的双曲线模型,即 D(R)=CR−KD(R) = ...

Aidoneus_y 6136

一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

这篇博客发出来后,我用 Rust 复现代码出现问题。为此,我对对照了 sklearn 的相关代码,反复比较了两天,发现一处 bug,把 += 误写成了 =,导致数据量大的时候完全无法聚类。这个debug过程让我仔细梳理的 AP 算法的计算过程,今天我对这篇博客做了大规模修改,以便能原样展现原论文思想。

程序猿视角 3219

P4016 负载平衡问题(费用流)

P4016 负载平衡问题 题意:n个相连的仓库,然后只能相邻的仓库转移东西,问最小的搬运量。 最小费用最大流问题: 难得是建图,这里提供一种方法:即 源点到仓库中量大于平均值的点,即需要流到其他仓库的,而小于平均值的则需要流入。 代码: //spfa版费用流 //最小费用最大流,求最大流费用只需要取相反数,结果取相反数即可 //点的总数为N,点的编号为0~N-1 #include...

fighting_yifeng的博客 252

ESP8266连接阿里云(STM32)

一、概述 之前通过串口调试助手+ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266进行串口通信,相当于使用STM32代替之前使用的串口调试助手来发送AT指令。只是发送的字符串数据可能有些细节需要注意一下。 二、保存连接的AT指令 定义几个字符串数据保存需要发送的AT指令 //注意: //末尾记得加\r\n //字符...

xyx0610的博客 4万+

cf Mahmoud and Ehab and another array construction task(素数处理大乱炖)

做惯了素数分解,其实直接因数分解,复杂度也是根号的,这非常有用. 筛是线性的,这也非常重要. 给出一段数,让你给出一个字典序大于他的最小数列.这种最小的大于..不是特别的东西. 每一个数放进来,素因数分解,如果和之前数没有重合,那么把他的新素因数都过一遍. 如果有了重合,那么就不行了. 这题说不出什么,感觉就是筛法的重现.搞不太清楚. #include &lt;iostream&gt;...

blog 307

STM32F103VCT6+W5500 TCP 服务端通信

STM32F103VCT6 W5500的TCP连接通讯的程序

坚韧与专注 7815

基于Blender软件对Matterport3D数据集场景可视化

使用Blender软件对 Matterport3D 中的室内场景进行可视化。

qq_44100524的博客 289

codeforces 959 D. Mahmoud and Ehab and another array construction task

题目链接 陈瑜推荐的好题。 就是给你一个数字串,让你找到一个字典序最小的串,满足这串中的数组两两互质,并且字典序不小于原串。 #include<bits/stdc++.h> #define mem(a,b) memset((a),b,sizeof(a)) #define de cout<<endl<<endl<<endl typedef lo...

flyzer的博客 246

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

洛谷 P4016 负载平衡问题

洛谷 P4016 负载平衡问题 题目: 裸题。转链接 题解: 因为是裸题就没必要放题目了。模型是环形均分纸牌。以前做过几道类似的题。有详细讲解。链接 #include <iostream> #include <cstdio> #include <algorithm> #define N 105 using namespace std; int...

weixin_30614109的博客 94

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

洛谷P4016 负载平衡问题 费用流

洛谷P4016 负载平衡问题 费用流 Code: #include&lt;cstdio&gt; //好题 #include&lt;algorithm&gt; #include&lt;vector&gt; #include&lt;cstring&gt; #include&lt;queue&gt; using namespa...

EM LGH 145

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

洛谷P4016 负载平衡问题

洛谷P4016 负载平衡问题 题目大意:   G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 n 个仓库的库存数量相同。搬运货物时,只 能在相邻的仓库之间搬运。 思路:   最小费用最大流。   假设物品的总库存之和为sum,那么为了使库存之和相等,搬运结束后每一个仓库的目标库存量ave应该都等于sum/n。   这时候很显然,我们发...

weixin_30602505的博客 171

洛谷 P 4016

题目链接:负载平衡问题最小费用最大流 这篇博客挺好的!关于构图:首先,这是一道最小费用(费用指在两个相邻仓库中的运输单价)最大流的题目。1.必不可少的有一个超级源点和汇点,st=0,ed=n+1。2.贪心的想,为了是所有仓库的数量都相等,就应该讲多余平均值的仓库运往少于平均值的仓库,自然而然就想到多的仓库应该贡献,连向源点;少的仓库应该得到,连向汇点,且费用为0(因为费用指在两个相邻仓库中的运输单...

佳梦作快马 诗酒趁年华 152

洛谷P4016负载平衡

题目 负载平衡问题是一个比较经典的网络流问题,但是该问题还有一个数学贪心法。 所以做这个题前,其实可以做一下均分纸牌问题。 均分纸牌问题 均分纸牌问题可以说是作为贪心的入门题。 做法 首先我们应当把原先的数都减上所有数的平均值,这样原数组就转化为了原数组和平均数的差。 这个题的思想也很简单,转化完毕之后,因为可以移到左右两边的位置上所以不妨只考虑后一堆,因为前一堆已经处理好了,所以可以暴力解决。每...

weixin_30437337的博客 153

负载平衡问题 洛谷P4016

题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 nn 个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。 输入格式 文件的第 11 行中有 11 个正整数 nn,表示有 nn 个仓库。 第 22 行中有 nn 个正整数,表示 nn 个仓库的库存量。 输出格式 输出最少搬运量。 输入 5 17 9 14 16 4 输出 11 ...

一颗牙疼 218

洛谷 [P4016] 负载平衡问题

贪心做法 第一眼看见觉得和均分纸牌差不多,然而因为这是环形的,并不能用均分纸牌的方法做,但是均分纸牌的思想仍然适用 首先我们假设平均数为sum1。 那么对于第1个人,我们假设他给第N个人K个糖果, 第2个人给1 第3个人给2 第n个人给第n-1个人 那么对于第1个人给完n,第2个人给完1,第一个人不会再改变糖果数了 所以应该是sum1那么第一个人原来是a1 给n之后是a1-k,代价是k,...

95
上一篇: 洛谷P2761
下一篇: 洛谷P3355
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值