POJ 2516 Minimum Cost (最小费用最大流)

深入解析TOM模块的PWM输出与ADC触发机制:从配置到DMA数据传输 本文深入解析了TOM模块在嵌入式系统中的核心应用,详细阐述了如何配置其PWM输出功能,并实现与ADC模块的硬件触发同步。重点介绍了通过DMA机制高效传输ADC采样数据的完整流程,涵盖时钟配置、工作模式选择、引脚映射及联调实战,为电机控制、数字电源等实时系统提供了一套硬件自动化的高效解决方案。 阅读详情

POJ 2516 Minimum Cost 


题意:有M个仓库,N个商人,K种物品。先输入N,M,K。然后输入N行K个数,每一行代表一个商人要购买的物品,其中K个数分别表示要购买的每件商品数。然后是M行K个数,每行表示仓库里的情况,其中K个数分别每种物品的库存量。接下来是K个矩阵,每个矩阵为N*M,分别表示第K种物品从M个仓库运到第N个商人的花费。问能否合理安排,使得花费最少,如果不行就输出-1。

思路:
一开始的时候,竟然构造了N*K + M*K的点,必然TLE了。
后来发现,其实可以对每一种物品做一次最小费用最大流。然后对每次费用求和即可。
不过一开始要先判断是否能够满足条件。只需要对每一件商品的需求和供应求和,每件商品的供大于等于求便一定能有答案。

代码:
/*
ID: wuqi9395@126.com
PROG:
LANG: C++
*/
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<fstream>
#include<cstring>
#include<ctype.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF (1 << 30)
#define LINF (1LL << 60)
#define PI acos(-1.0)
#define mem(a, b) memset(a, b, sizeof(a))
#define rep(i, a, n) for (int i = a; i < n; i++)
#define per(i, a, n) for (int i = n - 1; i >= a; i--)
#define eps 1e-6
#define debug puts("===============")
#define pb push_back
#define mkp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define POSIN(x,y) (0 <= (x) && (x) < n && 0 <= (y) && (y) < m)
typedef long long ll;
typedef unsigned long long ULL;
const int maxn = 5555;
const int maxm = 500000;
struct node {
    int v, cap, nxt, cost;
} e[maxm * 2];
int g[maxn], cnt, st, ed, n, m;
int ans, flow;
int N, M, K;
int nk[60][60], mk[60][60];
void add(int u, int v, int cap, int cost) {
    e[++cnt].v = v;
    e[cnt].cap = cap;
    e[cnt].cost = cost;
    e[cnt].nxt = g[u];
    g[u] = cnt;

    e[++cnt].v = u;
    e[cnt].cap = 0;
    e[cnt].cost = -cost;
    e[cnt].nxt = g[v];
    g[v] = cnt;
}
void init(int k) {
    cnt = 1;
    ans = flow = 0;
    memset(g, 0, sizeof(int) * (M + N + 10));
    // 加边
    st = 0, ed = M + N + 1, n = ed;
    for (int i = 1; i <= M; i++) add(st, i, mk[i][k], 0);
    for (int i = 1; i <= N; i++) add(i + M, ed, nk[i][k], 0);
    int c;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            scanf("%d", &c);
            add(j, i + M, INF, c);
        }
    }
}

int dis[maxn], que[maxn], pre[maxn];
bool vis[maxn];
bool spfa() {
    int font = 0, rear = 1;
    for(int i = 0; i <= n; i ++) {
        dis[i] = INF;
        vis[i] = false;
    }
    dis[st] = 0;
    que[0] = st;
    vis[st] = true;
    while(rear != font) {
        int u = que[font++];
        font %= n;
        vis[u] = false;
        for(int i = g[u]; i; i = e[i].nxt) {
            int v = e[i].v;
            if(e[i].cap && dis[v] > dis[u] + e[i].cost) {
                dis[v] = dis[u] + e[i].cost;
                pre[v] = i;
                if(!vis[v]) {
                    vis[v] = true;
                    que[rear++] = v;
                    rear %= n;
                }
            }
        }
    }
    if(dis[ed] == INF) return false;
    return true;
}
void augment() {
    int u, p, mi = INF;
    for(u = ed; u != st; u = e[p ^ 1].v) {
        p = pre[u];
        mi = min(mi, e[p].cap);
    }
    for(u = ed; u != st; u = e[p ^ 1].v) {
        p = pre[u];
        e[p].cap -= mi;
        e[p ^ 1].cap += mi;
        ans += mi * e[p].cost;     //  cost记录的为单位流量费用,必须得乘以流量。
    }
    flow += mi;
}
int MCMF(int k) {
    init(k);
    while(spfa()) augment();
    return ans;
}
bool get() {
    int n_k[110] = {0}, m_k[110] = {0};
    int c;
    rep(i, 1, N + 1) rep(j, 1, K + 1) {
        scanf("%d", &c);
        n_k[j] += c;
        nk[i][j] = c;
    }
    rep(i, 1, M + 1) rep(j, 1, K + 1) {
        scanf("%d", &c);
        m_k[j] += c;
        mk[i][j] = c;
    }
    for (int i = 1; i <= K; i++) if (n_k[i] > m_k[i]) return false;
    return true;
}
int main () {
    while(~scanf("%d%d%d", &N, &M, &K), N || M || K) {
        if (get()) {
            int tot = 0;
            for (int i = 1; i <= K; i++) {
                tot += MCMF(i);
            }
            printf("%d\n", tot);
        } else {
            int c;
            rep(i, 0, K) rep(j, 0, N) rep(k, 0, M) scanf("%d", &c);
            puts("-1");
        }
    }
    return 0;
}



[RAM] DRAM 导论:DDR4 | DDR5 | LPDDR5 | GDRR6 | HBM 应运而生 有数据的地方就有存储, 内存是谁都离不开的产品。而动态随机存取存储器(DRAM)作为一种常见的内存。本博客将介绍DRAM的基本概念、工作原理、优缺点以及应用领域等方面。 阅读详情

相关推荐

智能体在车联网中的应用:第31天 基于RLlib的多智能体PPO实战:MAPPO算法解决simple_spread合作任务

本文介绍了如何利用RLlib框架实现多智能体强化学习算法MAPPO,解决simple_spread任务。首先分析了RLlib的架构设计理念和多智能体支持特性,包括策略映射、环境包装等核心组件。然后详细解析了simple_spread环境的任务定义、观察空间和奖励函数设计。最后回顾了MAPPO算法原理,说明其如何在RLlib中实现集中式训练与分布式执行的CTDE范式。文章提供了完整的安装指南和环境配置方法,帮助读者快速搭建多智能体强化学习实验环境。

IT深耕十余载,大道之简 1332

图论 —— 网络流 —— 费用流 —— MCMF 算法

【概述】 EK 算法是每次用广搜寻找一条最短的增广路,然后沿其增广,而 MCMF 算法是在 EK 算法的基础上,每次用 SPFA 计算图的距离标号,然后沿着可行边进行增广,即将 EK 算法中的 bfs 替换为 SPFA 求最短路,边权为该边的单位流量花费,即改变遍历的优先级来实现。 【基本思想】 1.每次查找是否存在从源点到汇点可增广的路径(源点到汇点的最短路且路径上的所有边均不能满流),并...

Alex_McAvoy的博客 2511

【暂时完结】Prescan学习笔记

Prescan学习记录1. Prescan基础知识1.1 Conventions·坐标1.2 Road segment·道路片段1.2.1 让一个路段连接其他两个路段1.2.2 配置车道线1.2.3 Road marking·道路标志1.3 Trajectory·轨迹1.3.1 建立一个Path·路径1.3.2 配置Speedprofile1.3.3 Synchronization of Trajectories·轨迹同步1.3.4 Multiple trajectories · 多轨迹分配 1. Pres

dreautumn的博客 1万+

POJ 2516 Minimum Cost 【MCMF:最小费用最大流】

/*第一次做最小代价最大流(MCMF)的题,所谓最小代价最大流就是要找到一个最大流量的方案且这个最大流所需要的费用是所有相等流量中最小的MCMF和普通的最大流问题的唯一区别是每次找增广路径是要找费用最小的路径,这就需要维护一个费用图,每次增流时需要将这次增流耗费的费用加到总费用上去并修改费用图。由于商品之间是不相关的,所以对每种商品分别使用MCMF就行,如果有一种商品得不到满足就跳出,如果能一直执行,则最后输出minCost即可*/#include #define MAX_VAL 99999999

bobten2008的专栏 1618

腾讯大佬总结的170道 python面试题

简述基于 TCP 协议的套接字通信流程。19.面向对象中`__new__` 和 `__init__` 区别。86. 解释 Python 中的`//`,`%`和`**`运算符。45.isinstance 的作用以及与 type()的区别。3. 简述下 Python 中的字符串、列表、元组和字典。143. 如何高效的找到 redis 中的某个 KEY。140. 如何保证 redis 中的数据都是热点数据。147. redis 中的 watch 的命令的作用。108. 简述 进程、线程、协程的区别以及应用场景。

AudiA6LV6的博客 488

锐浪报表 Grid++Report 子报表 Delphi

锐浪报表 Grid++Report 是国内较好的报表控件,本人一直使用它,做出很多特色的报表。可以说你的报表设计出来,它基本上能做出来。 但是它帮助文件上,说的不深,近期因为要做一个有关社工的报表,大表中,嵌套2个子表。可以说,一个表到三个数据集,分别打印。 在认真看了帮助的基础上,网上探索,基本无此类,特别是Delphi的帮助,几乎为零。经二天摸索,做出来了。 一、设计思路 1、大表和二个小表,可以设计为三个表,分别使用三个GridppReport控件,取名...

lyhoo163的专栏 9073

最小费用最大流MCMF算法

摘要在复杂网络研究中,单源单点的最小费用最大流算法(以下简称MCMF)的应用十分广泛。

LeYOUNGER的博客 6448

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube

本教程基于群晖的NAS设备DS423+的docker功能进行搭建,DSM版为 7.2.1-69057 Update 5。MetaTube是一个媒体服务器插件,主要用于Emby和Jellyfin媒体服务器。它的主要功能是从互联网上抓取内容并响应 JSON 数据,然后通过预安装的 MetaTube 插件请求服务器并下载相应的元数据,以与 Jellyfin/Emby 服务器配合使用。使用 MetaTube 的步骤大致如下:部署后端:首先,需要部署一个名为​ 的后端 API 服务器来抓取内容。

小小笔记大大用处 1万+

【POJ】 2516 Minimum Cost 费用流

Minimum Cost Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 13052   Accepted: 4442 Description Dearboy, a goods victualer, now comes to a big problem, and he

poursoul 810

《多模态融合改进》支持目标检测、目标分割、OBB、姿态估计,配置教程

本文以为例,讲解如何配置,支持替换专栏里所有的改进方式。

Limiiiing的博客 795

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 362

Stereo Matching文献笔记之(六):浅谈置信度传播算法(Belief-Propagation)在立体匹配中的应用~

这是我一个纠结过的问题,曾经反反复复的看相关的知识,Belief-Propagation是一个伴随着“马尔科夫随机场”提出的优化算法,我对优化算法情有独钟,一直觉得搞定了各种优化,机器学习剩下的也就是知识扩展而已,嘿嘿,我也不知道这么想是对是错,最近脑袋糊涂的厉害,请各位见谅。。。。

love模式识别 1万+

【机器人学】常用的小车底盘运动学模型推导(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对小车底盘运动学模型介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容对于小车的分析,仅仅考虑XY轴的线速度和Z轴的角速度,不考虑和横滚和俯仰的速度,【防盗标记–盒子君hzj】也不考虑Z轴的高度变化【即:车底盘的运动可以用三个独立变量来描述:x轴平动、y轴平动、yaw轴转动】

qq_35635374的博客 1931

poj 2516 Minimum Cost 【最小费用最大流】

题目:poj 2516 Minimum Cost 题意:有 n 个商店,k种物品和 m 个供货商,让你求进满足商店需求的货物的最小花费? 有必要说一下输入数据。 首先n ,k ,m  然后是一个n*m的矩阵,n个商店对每种货物的需求,表示第 i 个商店需要第 j 种货物 x个  然后是m * k 的矩阵,m个供货商可以供k种货物的数量,表示第 i 个供货商 提供第 j 中货物 x

大神养成中..... 3653

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POj2516 Minimum Cost 最小费用最大流

题目链接: poj2516 题意: Dearboy 是一个优秀的食品供应商,他现在面临一个大问题,需要你的帮忙。在他的销售地区,有N 个店主(编号从1~N)帮他销售食品。Dearboy 有M 仓库(编号从1~M),每个仓库第6 章 网络流问题可以提供K 种不同的食品(编号从1~K)。一旦有店主向他订食品,Dearboy 应该安排哪个仓库、向该店主提供多少食品,

旧时光 1070

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

POJ 2516 Minimum Cost(最小费用最大流)

题目链接:http://poj.org/problem?id=2516 Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area there are N shopkeepers (marked from 1 to N) wh...

1703

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

(最小费用最大流)POJ2516 Minimum Cost

很经典的一道费用流问题,题目大意是有N个商店,M个供应商,供应K种物品,每家商店对每种物品都有一个需求量,每家供应商供应的每种物品的量不同,而每家供应商运送每种物品到一家商店的成本也不一样,求在供等于求和供大于求的情况下供应商满足所有商店需求的最小成本,若供不应求,输出-1。 建图方法如下: 1.建立一个超级源,将其与供应商连接起来,容量为其对一种物品的供应量,代价为0; 2.建立一个超级汇

LycenYao的专栏 1901

POJ 2516 Minimum Cost(最小费用最大流)

POJ 2516 Minimum Cost(最小费用最大流) Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area there are N shopkeepers (marked from 1 to N) which stocks goods from him...

weixin_43179892的博客 298

POJ 2516Minimum Cost(最小费用最大流)

题意:给出n个客户对k种商品的需求量,又给出m个仓库对k种物品的存货量以及对k种物品从i仓库到j客户的一个物品的运费价格,让判断是否可以满足客户需求,然后就是如果满足求出最小的运费. 思路:简单的最小费用最大流,注意建图细节即可。下面解释转自网上。           首先必须判断m个仓库是否有足够的k种商品给n个客户,如果不足,那么明显就是不行的. 下面假设仓库的商品足够的话:  

围巾的ACM博客 1353

poj 2516 Minimum Cost 最小费用最大流

大致题意:        有N个供应商,M个店主,K种物品。每个供应商对每种物品的的供应量已知,每个店主对每种物品的需求量的已知,从不同的供应商运送不同的货物到不同的店主手上需要不同的花费,又已知从供应商Mj送第kind种货物的单位数量到店主Ni手上所需的单位花费。 问:供应是否满足需求?如果满足,最小运费是多少?   解题思路: 费用流问题。   (1)

u013087645的专栏 811

POJ2516 Minimum Cost【最小费用最大流】

题目链接:http://poj.org/problem?id=2516 Minimum Cost Time Limit:4000MS Memory Limit:65536K Total Submissions:19928 Accepted:7064 Description Dearboy, a goods victu...

a6334167的博客 157

poj 2516 Minimum Cost (最小费用最大流)

题目链接:http://poj.org/problem?id=2516 Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area there are N shopkeepers (marked from 1 to N) whic

Vision 1030

POJ 2516 Minimum Cost (最小费用最大流)

题目类型  最佳完美匹配, 最小费用最大流 题目意思 给出一个最多 100 * 100 的字符矩阵 其中有若干个m和相同数量的H, 现在要使每个m都与一个不同的H配对,问最少的花费是多少 一次配对的花费是配对的两个字符的哈密顿距离 解题方法 用km算法求最佳完美匹配(即花费最小的完美匹配) 每个m点和所有的H点连一条权值为原花费*(-1)的边 然后求一

yunyouxi0's blog 820

poj2516 Minimum Cost (最小费用最大流)

分析: 题目输入方式有点奇怪。 这题我马上想到的是拆点 开始做的时候直接拆了nk+mk个点,超级大图,疯狂debug 结果一发就TLE 心态大崩 正解是把k种商品独立,轮流对每个商品建图, 跑k次最小费用最大流,把每次跑出来的费用相加就行了 不需要拆点。 code: #include<iostream> #include<cstdio> #include<cstrin...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 909

POJ2516 Minimum Cost 最大流最小费用典型题目

刚接触spfa算法。 我的理解是spfa算法实质是bellman算法的改进版,可以处理负值,这是和dij的本质区别,也是这里不能用dij的原因。 spfa算法的队列的大小一定要注意!开小了悲情无限。 而最大流最小费用的思路说简单了就是最大流的实现时,以前没有最小费用这个约束

Aszxqw 788

poj 2516 Minimum Cost(最小费用最大流)

http://poj.org/problem?id=2516 题目大意: 有n个商店,m个仓库,k种商品,给出每个商店对k种商品的需求和每个仓库储存的k种商店库存,要求求出满足供应要求的最小运输费用; 题目的输入: 第一行输入3个整数n,m,k分别代表商店仓库以及商品种类的数量; 接下来n行分别列出每个商店k种商品的需求数量; 接下来m行分别列出每个仓库k种商品的库存数量;

cha1_cool的专栏 647
上一篇: POJ 3422 Kaka's Matrix Travels (最小费用最大流)
下一篇: HDU 4862 Jump (最小K路径覆盖)
SIO__Five
博客等级 码龄14年 29粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值