POJ 3422 Kaka's Matrix Travels (最小费用最大流)

VHDL按键消抖(状态机版本) 检测下降沿:设置一个和,分别代表之前的之前和之前的信号状态,若两个信号key_in_d2=1,key_in_d1=0,他俩的not key_in_d2 and key_in_d1为1,则说明下降沿产生,把它设置为标志位key_flag。延时计数:50MHz的板子每次计数需要20ns,而抖动时间大约为5-10ms。所以取7ms,作为延时时间。可以看见当检测到下降沿时,开始计数计数计满再次检测,若为低电平则为按下按键,否则为抖动。通过检测下降沿来临,延时计数再次检测,如果为低电平则为按键按下。 阅读详情

POJ 3422 Kaka's Matrix Travels


题意:有一个N*N的方格,每个方格里面有一个数字。现在卡卡要从左上角走到右下角,规定每次只能向下或者向右走,每次走到一个格子,将得到该格子的数字,并且该格子的数字变为0。当卡卡走一次时,很容易求出最大值,问卡卡走k次,能够得到的最大值为多少。

思路:最小费用最大流
关键是如何构图
1. 将N*N个格点拆分为两个点(i,i + N*N),每个点之间连一条流量为1,费用为-w的边,再连一条流量为k,费用为0的边。这样就保证了每个点之间可以走k次,且最多只有一次能拿到费用。
2. 将每个点与其下面、右边的点连边,流量为k,费用为0.
3. 构造两个源点、汇点。源点和左上角连边,流量为k,费用为0. 右下角与汇点连边,流量为k,费用为0.

至此,容量网络已经构成。 每次在残余网络中找费用最短路进行增广即可。

代码:
/*
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 << 20)
#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 nt, k;
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() {
    cnt = 1;
    ans = flow = 0;
    memset(g, 0, sizeof(g));
    // 加边
    int w;
    int p = nt * nt;
    for (int i = 1; i <= nt; i++) {
        for (int j = 1; j <= nt; j++) {
            scanf("%d", &w);
            int id = (i - 1) * nt + j;
            add(id, id + p, 1, -w);
            add(id, id + p, k, 0);
            if (i < nt) add(id + p, id + nt, k, 0);
            if (j < nt) add(id + p, id + 1, k, 0);
        }
    }
    st = 0, ed = p * 2 + 1;
    n = ed;
    add(st, 1, k, 0);
    add(p * 2, ed, k, 0);
}

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() {
    init();
    while(spfa()) augment();
    return ans;
}
int main () {
    while(~scanf("%d%d", &nt, &k)) {
        printf("%d\n", -MCMF());
    }
    return 0;
}


如何使用Dify 搭建一个用自然语言查询数据库的 Agent? 这样就会发布完毕。 阅读详情

相关推荐

数据中心光模块升级实录:从200G QSFP56到400G QSFP-DD的踩坑指南

本文记录了数据中心从200G QSFP56升级至400G QSFP-DD光模块的完整实战经验。文章深入剖析了升级过程中面临的兼容性、链路预算、布线、散热与功耗管理等核心挑战,并提供了具体的解决方案与排坑指南,为高速网络升级提供了宝贵的实践参考。

butter的博客 479

poj 3422 Kaka's Matrix Travels (最小费用最大流 模板)

题目链接:   poj 3422 题目大意:   给出NxN的数字矩阵,左上角走到右下角(只能向右或向下走),sum记录走过点值的和                   走过的点值置为0,问走K次,求sum的最大值 解题思路:   开始想到的是K次最长路,结果WA了                   因为每次走最长路会导致下次走的时候不是最优解

ンZee的解题报告 1169

Vision-Language Navigation - Windows环境下编译安装Matterport3D Simulator仿真器(三)

目录1 编译 Matterport3D Simulator 源码1.1 源码下载1.2 编译 1 编译 Matterport3D Simulator 源码   在 Windows 下编译 Matterport3D Simulator 稍微有些不方便,需要对 CMakeLists.txt 进行一些修改,如果有更好的方法欢迎大家评论。 1.1 源码下载   还是直接在 Github 上搜索 Matterport3D Simulator 的 repo,下载源码。如果用 zip 方式,那么直接在下即可。如果使用

weixin_44110393的博客 4845

poj3422 Kaka's Matrix Travels(最小费用最大流问题)

1 /* 2 poj3422 Kaka's Matrix Travels 3 不知道 k次 dp做为什么不对??? 4 看了大牛的代码,才知道还可以这样做! 5 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序一直陷入死循环,真心花了好长时间,快崩溃了。无语..... 6 题意:有个方阵,每个格子里都有一个非负数,从左上角走到右下角,...

aipiannian6725的博客 157

解决Qt平台插件初始化失败:This application failed to start because no Qt platform plugin could be initialized

本文深入解析了Qt应用程序启动时常见的‘platform plugin’初始化失败报错,指出其核心在于环境变量冲突或多版本Qt共存导致的插件路径混乱。文章提供了从环境变量检查、路径调整到文件补全的完整解决方案,并给出了使用windeployqt工具等预防性开发实践,帮助用户和开发者彻底解决这一经典问题。

weixin_29229261的博客 2189

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

【POJ 3422】 Kaka's Matrix Travels (最小费用最大流)

【POJ 3422】 Kaka's Matrix Travels (最小费用最大流) Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8848   Accepted: 3553 Descript

ACMer' 933

Adams与Matlab联合仿真入门:从零搭建你的第一个动力学模型

本文为Adams与Matlab联合仿真新手提供了一份详尽的入门指南。文章从软件环境配置、版本兼容性检查讲起,逐步演示了如何在Adams中构建单摆动力学模型并定义输入输出接口,以及在Matlab/Simulink中搭建控制回路。通过一个完整的受控单摆实例,手把手教你完成从模型导出、模块生成到执行联合仿真的全流程,帮助你快速搭建并运行第一个联合仿真模型,实现动力学与控制系统的协同验证。

g5h6i7j的博客 699

poj 3422 Kaka's Matrix Travels 最小费用最大流

我的第一道费用流,难得一次性ac啊,哈哈!不过 debug 了很久。。。建图要小心,要特别小心!!!!!这道题和大一暑假集训做的那个采蘑菇的 gondar 很像,记得哥当时用了一个犀利的一逼的dp搞定了。。。其实一点都不犀利。。。然后 racebug 问我如果有 10 个人怎么办,我想尼玛 10 个人就开个 11 维数组呗。。- -!然后 racebug 说那就果断超时了嘛。。。又说。。那果断就是

量子流逝 932

Vivado2023.2与Vitis协同开发:从Hello World到BOOT.BIN的完整流程解析

本文详细解析了使用Vivado 2023.2与Vitis协同开发ZYNQ/MPSoC平台的完整流程。从环境安装、硬件设计、软件编写、在线调试到生成独立的BOOT.BIN启动文件,手把手指导开发者完成从Hello World到系统固化的全步骤,并提供了常见问题的避坑指南,帮助初学者快速掌握软硬件协同开发的核心技能。

weixin_29197051的博客 176

使用geneHapR进行基因单倍型分析(以vcf文件为例)

如下图所示,可以看到,用户需要准备的包括:基因型文件、注释文件和样本信息文件,以及后续会用的表型文件。输出的主要内容有:变异位点的可视化、单倍型网络、地理分布、表型比较和连锁不平衡热图。geneHapR的工作流程。

沉香best的博客 5941

POj3422 Kaka's Matrix Travels 最小费用最大流 拆点

题目链接: poj3422 题意: 有一个N X N的矩阵, 矩阵的每一小格都有且仅有一个数字v,kaka每经过一个数字就会把它捡起来并将那个数字加到sum上去. 现在kaka能通过向下或向右走的方式从 (1,1)到(n,n)  K次,问kaka能取到的最大的sum是多少. 解题思路: 题目问题可以抽象为   求多次可走重复路的最长路的最大和问题

旧时光 984

【PX4学习笔记】1. ROS及PX4环境搭建

环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d

【人工智障 | 计算鸡视觉 | 机器孩】 8232

poj 3422 Kaka's Matrix Travels(最小费用最大流)

题目链接 Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9394   Accepted: 3813 Description On an N × N chessboard with a non-negativ

fouzhe的博客 313

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

POJ 3422 Kaka's Matrix Travels 最小费用最大流

题意:给一个n*n的矩阵,可以走k次,只能往右或往下走,每次走到一个点取走这个点的数,求取走数的和的最大值 思路:要是按照我之前的思路,第一个想到的不是dfs就是dp,谁知道这种题居然可以用网络流来做,建图方式对我这个水平来说可以说是非常牛逼了。由于答案要求最大费用,故可以先把边权取负,求出最小费用,最后再取反。对于每个点拆成两个点,由DP思想,可以选择走这个点或者不走这个点,所以建两条边,一条边...

qq_42397248的博客 173

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

poj 3422:Kaka's Matrix Travels(最小费用最大流)

大致题意: 给出N和K,表示一个N*N个区域组成的的方阵map,方阵的每个区域都有自己的一个值map[i][j]。现从(0,0)点走到(n,n)点走K次,规定只能向右走或者向下走,每经过一个区域取走区域中的值,map[i][j]变为0,一个区域可以被多次经过。求最多能取走多少值

暴风雪 1322

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

poj 3422 Kaka's Matrix Travels(最小费用最大流)

Language: Default Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8314   Accepted: 3326 Description On an N × N chessboard with a n

youngkl博客 920

poj-3422-Kaka's Matrix Travels-最小费用最大流

最小费用最大流。 建图方式如图所示 然后就是费用流的模板~~ 把最小费用转化成最大费用,做法一样。 还有一种做法,就是把所有的边的费用取负,然后去最小费用,然后去负值就好。‘ #include #include #include #include #include using namespace std; #define INF 99999999 #define maxn 505

青竹梦 1261

POJ--3422--Kaka's Matrix Travels【最小费用最大流+拆点】

链接:http://poj.org/problem?id=3422 卡卡 题意:卡卡的矩阵之旅,有一个n*n的矩阵,卡卡要从左上角走到右下角,每次他只能往右或往下走,卡卡可以走k遍这个矩阵,每个点有一个num值,卡卡走到这里可以获得num点,一个点只能获得一次num值,问卡卡走完k遍后身上num值最大可以是多少? 思路:其实看到这题时没思路,图论书上说了建图的方式,但

阳光照耀圣西罗 1300

POJ 3422 Kaka's Matrix Travels | 最小费用最大流

题目: 给个n*n的带正权矩阵,k次从(1,1)走到(n,n),每个格子的权值只能获得一次,每次只能向右或下走 问获得最大权值 题解: 求最大权值可以把权值变成负的求最小 然后考虑怎么约束每个格子的权值, 把格子拆成两个点,连两条边:一条容量为1,花费为-权值,一条容量为INF,花费为0 S到第一个格子,连容量为k,最后一个格子的二号点到T,容量为k 这样就可以限制每个点只有走...

weixin_30505225的博客 124

[poj] 3422 Kaka's Matrix Travels || 最小费用最大流

原题 给一个N*N的方阵,从[1,1]到[n,n]走K次,走过每个方格加上上面的数,然后这个格上面的数变为0。求可取得的最大的值。 要求最大值,所以把边权全为负跑最小费用即可。因为只有第一次经过该点的时候会得到价值,所以我们将一个点拆为两个,连一条容量为1费用为负权的边和一条容量为k-1费用为0的边。然后和右和下的点连边为容量为k,费用为0的边。跑费用流即可。 #include<cstdio...

weixin_30398227的博客 109

POJ Kaka's Matrix Travels 3422 (最小费用最大流)

Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9524   Accepted: 3876 Description On an N × N chessboard with a non-negative number i

原点 406

POJ 3422Kaka's Matrix Travels(最小费用最大流)

Kaka's Matrix Travels Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9460 Accepted: 3844 Description ...

weixin_34194702的博客 125
上一篇: POJ 2396 Budget (有源汇有上下界的可行流)
下一篇: POJ 2516 Minimum Cost (最小费用最大流)
SIO__Five
博客等级 码龄14年 29粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值