HDU 2686 Matrix 最小费用最大流

Spring Boot整合AWS S3文件上传实战:从配置到权限管理全流程解析 本文详细解析了Spring Boot整合AWS S3文件上传的全流程,包括基础配置、核心上传功能实现、高级权限控制及安全最佳实践。通过实战案例展示如何高效处理文件上传、大文件分片及权限管理,帮助开发者构建健壮的文件管理系统。特别强调AWS S3的高可用性和安全性,适用于企业级应用开发。 阅读详情
题意:给一个N*N的矩阵,找一条路从(1,1)到(n,n)然后再从(n,n)回到(1,1),除了(1,1)和(n,n)每个点只能经过一次。
思路:把每个点拆成入点和出点,拆点是为了控制权值。(1,1)和(n,n)的 位置流量为2,把(i,j)的入点和(i-1,j) (i,j-1)分别连一条流量为1的边(控制流量,保证每个点只能经过一次)。网络流求的是最小费用,只要将100-权值即可(权值<100),最后算结果的时候再处理。

http://acm.hdu.edu.cn/showproblem.php?pid=2686

/*********************************************
    Problem : HDU 2686
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = a ; i <= b ; i ++)
#define rrep(i,a,b) for(int i = b ; i >= a ; i --)
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next)
#define cls(a,x)   memset(a,x,sizeof(a))

using namespace std;

const int MOD = 1e9+7;
//const int INF = 0x3f3f3f3f;
//const int MAXN = 1e5;
//const int MAXE = 2e5;

typedef long long LL;

int T,n,m,k;

const int MAXN = 10000;  
const int MAXM = 100000;  
const int INF = 0x3f3f3f3f;  

struct Edge{  
    int to,next,cap,flow,cost;  
}edge[MAXM];  

int head[MAXN],tol;  
int pre[MAXN],dis[MAXN];  
bool vis[MAXN];  
int N;  
//N means the number of nodes.from 0 to n-1  

void init(int n){  
    N = n;  
    tol = 0;  
    memset(head,-1,sizeof(head));  
}  

void addedge(int u,int v,int cap,int cost){  
    edge[tol].to = v; edge[tol].cap = cap; edge[tol].cost = cost;  
    edge[tol].flow = 0; edge[tol].next = head[u]; head[u] = tol ++;  
    edge[tol].to = u; edge[tol].cap = 0; edge[tol].cost = -cost;  
    edge[tol].flow = 0; edge[tol].next = head[v]; head[v] = tol ++;  
}  

bool spfa(int s,int t){  
    queue<int>q;  
    for(int i = 0;i < N;i++){  
        dis[i] = INF;  
        vis[i] = false;  
        pre[i] = -1;  
    }  
    dis[s] = 0;  
    vis[s] = true;  
    q.push(s);  
    while(!q.empty()){  
        int u = q.front();  
        q.pop();  
        vis[u] = false;  
        for(int i=head[u];i != -1;i=edge[i].next){  
            int v = edge[i].to;  
            if(edge[i].cap > edge[i].flow && dis[v] > dis[u] + edge[i].cost){  
                dis[v] = dis[u] + edge[i].cost;  
                pre[v] = i;  
                if(!vis[v]){  
                    vis[v] = true;  
                    q.push(v);  
                }  
            }  
        }  
    }  
    if(pre[t] == -1) return false;  
    else return true;  
}  

//ruturn maxflow ,cost is the mincost;  
int mincost_maxflow(int s,int t,int &cost){  
    int flow = 0;  
    cost = 0;  
    while(spfa(s,t)){  
        int Min = INF;  
        for(int i = pre[t];i != -1;i = pre[edge[i^1].to]){  
            if(Min > edge[i].cap - edge[i].flow)  
                Min = edge[i].cap - edge[i].flow;  
        }  
        for(int i = pre[t];i != -1;i = pre[edge[i^1].to]){  
            edge[i].flow += Min;  
            edge[i^1].flow -= Min;  
            cost += edge[i].cost * Min;  
        }  
        flow += Min;  
    }  
    return flow;  
}

int Map[35][35];
int Mat[35][35][2];

void input() {
    rep(i,1,n) rep(j,1,n) {
        scanf("%d",&Map[i][j]);
        Map[i][j] = 100 - Map[i][j];
    }
}   

void solve() {
    int tot = 0;
    cls(Mat,0);
    rep(i,1,n) rep(j,1,n) {
        Mat[i][j][0] = tot ++; //入点
        Mat[i][j][1] = tot ++; //出点
    }
    init(Mat[n][n][1]+1);
    rep(i,1,n) rep(j,1,n) {
        if(i == 1 && j == 1) addedge(Mat[i][j][0],Mat[i][j][1],2,Map[i][j]);
        else if(i == 1) {
            addedge(Mat[i][j][0],Mat[i][j][1],1,Map[i][j]);
            addedge(Mat[i][j-1][1],Mat[i][j][0],1,0);
        }
        else if(j == 1) {
            addedge(Mat[i][j][0],Mat[i][j][1],1,Map[i][j]);
            addedge(Mat[i-1][j][1],Mat[i][j][0],1,0);
        }
        else if(i == n && j == n) {
            addedge(Mat[i][j][0],Mat[i][j][1],2,Map[i][j]);
            addedge(Mat[i][j-1][1],Mat[i][j][0],1,0);
            addedge(Mat[i-1][j][1],Mat[i][j][0],1,0);
        }
        else {
            addedge(Mat[i][j][0],Mat[i][j][1],1,Map[i][j]);
            addedge(Mat[i][j-1][1],Mat[i][j][0],1,0);
            addedge(Mat[i-1][j][1],Mat[i][j][0],1,0);

        }
    }
    int cost = 0;
    int flow = mincost_maxflow(Mat[1][1][0],Mat[n][n][1],cost);
    cost = 100*(4*n-2)-cost - (200 - Map[1][1] - Map[n][n]);
    printf("%d\n",cost);
}

int main(void) {
    //freopen("a.in","r",stdin);
    //scanf("%d",&T);
    //while(T--) {
    while(~scanf("%d",&n)) {
        input();
        solve();
    }
    return 0;
}
(超详细)Qt入门和配置Visual Studio的Qt环境 内容写了Qt入门,创建并编写第一个Qt程序,以及配置VS编写Qt程序的环境。(超级详细) 阅读详情

相关推荐

TC264摄像头循迹进阶:八邻域与逐行遍历在复杂赛道边界提取中的实战对比

本文对比分析了TC264摄像头循迹中八邻域法与逐行遍历法在复杂赛道边界提取中的实战表现。八邻域法在边界连续性方面表现优异,适合处理环岛等复杂元素;逐行遍历法则在计算效率和岔路口识别上更具优势。文章提供了详细的代码实现和优化策略,帮助智能车竞赛选手根据赛道特点选择最佳算法方案。

rainy的博客 938

HDU 3338 Kakuro Extension 网络流

题意:给一个N∗NN*N的矩阵,白色的格子要求填数(范围1~9),要求:如果有出现如028\XXX(称为上边的情况),则表示,我这个格子下面所有的白格子中的数字之和要等于这个。如果有出现XXX\028(称为左边的情况),则表示,我这个格子右边所有的白格子中的数字之和要等于这个。思路:神奇的网络流。白格子需要拆为入点和出点,来控制经过白格子的流量。源点与每个左边的情况连一条流量为左边情况数字的边,每个

NM的专栏 465

Carla-UE4Editor导入RoadRunner地图文件(保姆级教程)

以Carla官网导入RoadRunner地图的标准文档为参考,里面增添了很多细节和注意事项,遇到问题的小伙伴过来看看吧。

DSK_981029的博客 1万+

全面理解网络流中的最大流问题

网络流(最大流问题) 前序 在将网络里实现算法之前,我们得聊聊网络流究竟是个什么东西,毕竟只有知道它的样貌,才能继续看懂下面的定义,对吧? 首先,网络流不仅仅指的是什么FF算法、dinic算法。算法只是用来解决问题的(稍后我们会更加能体会这一点),而网络流,指的就是这一系列存在图论中的,关于“流(Flow)”的问题。 参考:Network flow problem - Wikipedia 网络流中有以下几种问题: 最大流问题 最小费用流问题 多商品流问题(multi-commodity flow p

Nopoduct的博客 1万+

vivado下ECO操作-不重新综合实现修改属性并生成.bit

ECO即engineer change order,即工程变更指令,可以对设计做局部小改动并只对改动部分重新布局布线并生成.bit。在一个工程动辄编译几个小时情况下,可以在调试中节省大量时间。比如我们在调试中,需要改变时钟占空比或者相位,需要改变寄存器初值等等,此时用ECO暂时改动,待验证后在重新编译无疑是最有效率的方法。 实现ECO通常有两种方式,一是通过vivado界面完成,另一种方法就是tcl脚本。所有的ECO操作都可以通过tcl操作完成,有的操作用vivado界面无法完成,只能通过tcl。以下主要

4657

python监听海康威视报警服务器

因为我使用海康威视摄像头是自带热成像的所以事件报警会上报两张图片,一张是RGB图像、另一张是热成像图像,因此使用。拿到的就是第一张RGB图像。可以点击测试,会显示。

qq_57018478的博客 1161

hdu 2686 Matrix 最小费用最大流

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n Matrix. A positive integer number is put in each area of the Matrix.Every time yifenfei should t...

weixin_30326515的博客 127

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2042

hdu 2686 Matrix - 最小费用最大流 或 多线程DP

/* hdu 2686 Matrix 方阵(每个格子里面都有一个数字)里面从左上走到右下,再回来,一个点只能走一次,求数字之和最大是多少 相当与从左上到右下选两条不交叉的路,使和最大 典型的最大费用最大榴 我要说的是,这是昨天的省赛的原题,当时就像到了什最大费用最大流,但是当时脑袋一热,又感觉不是(韩式我对这个算法的理解不够啊) 其实只要在那个模板(http://blog.youkuaiyun.com/qq

1041

一张图读懂 SAP S/4HANA Cloud 与 SAP BTP 的扩展版图

本文解析了SAP S/4HANA Cloud的扩展技术谱系,提出扩展应分为on-stack(系统内)和side-by-side(并行)两种路径,并沿着低代码到专业代码的能力梯度进行分层。on-stack扩展包括面向业务人员的Key User Extensibility和面向开发者的Developer Extensibility,强调贴近核心业务对象;side-by-side扩展则依托SAP BTP平台,提供SAP Build低代码工具、CAP开发框架和ABAP云环境三种方案,支持解耦创新。文章通过五个真实案

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 882

hdu 2686 Matrix 最小费用最大流

#include #include #include /* 题目大意是给定一个n*n的矩阵,yifenfei从起点(1, 1)这个位置一直取数到(n,n), 每取完一个数,下一个只能取当前数右方或者下方的一个数, (注意两个数之间的距离应该是1,之前以为下方或者右方任何一个数都可以取), 就这样取到(n,n),然后再从(n,n)取回(1,1),这次每取完一个数, 下一个只能取当前数左方或者右方的一

天逸南爵的专栏 453

iOS逆向之深入解析Hook的原理方法和安全防护

Hook简介 Hook就是一种改变程序执行流程的一种技术的统称; 一段程序的执行流程是 A --> B --> C,现在我们在 A 和 B 之间插入一段代码或者直接改变 B ,这样程序原有的执行流程就发生了改变。如下图所示: Hook的方式:Method Swizzle,fishhook,Cydia Substrate; Hook原理 一、Method Swizzle 原理 利用OC的Runtime特性,动态去改变SEL(方法编号)和IMP(方法实现)的对应关系,达到OC方法调用流程改变

╰つ栺尖篴夢ゞ 2万+

HDU 2686 Matrix(费用流)

HDU 2686 Matrix(费用流) http://acm.hdu.edu.cn/showproblem.php?pid=2686 题意:        有一个n*n的矩阵,矩阵的格子中每个都有一个正数.现在你要从左上角走到右下角去,然后在从右下角回到左上角.过程中除了左上角和右下角外,任意网格最多走一次,且要求你所走过的所有网格的权值和最大,为最大值是多少? 分析:

code 1239

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

HDU 3376 Matrix Again (最小费用最大流)

Problem Description Starvae very like play a number game in the n*n Matrix. A positive integer number is put in each area of the Matrix. Every time starvae should to do is that choose a detour w

小坏蛋_千千 1103

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HDU 3376 Matrix Again(最大费用最大流)HDU2686加强题

Matrix Again Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 3206    Accepted Submission(s): 937 Problem Description Starvae very lik

青山绿水之辈 专栏 1064

pscad IEEE标准系统搭建说明

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

HDU 2686 Matrix(最大费用最大流+拆点)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 和POJ3422一样 删掉K把汇点与源点的容量改为2(因为有两种方向的选择)即可 #include #include #include #include #include #include const int maxn = 20000; const int maxm = 800

NotPerfect-EOF 1213

hdu - 2686 Matrix、 hdu - 3776 Matrix Again 最大费用最大流 拆点

题意:给一个n*n的距阵,每个点都有一个值。问从(0,0)到(n-1, n-1)点(只能从左到右 或 从上到下)再回到(0,0)点(只能从右到左 或 下到上)经过的点的值总和最大是多少?每个点只能走一次。每个点拆成i, i + n * n  源点出2个方向,汇点进两个方向,所以就是一遍最大费用最大流建图:sp : 0   tp:n * n - 1        i-&gt;i + n * n (i...

陌离将离 347

HDU 2686 Matrix(最大费用流)

Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1890    Accepted Submission(s): 1005 Problem Description Yifenfei very like play

青山绿水之辈 专栏 1345

HDU 2686 Matrix 多线程dp

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 思路:多线程dp,参考51Nod 1084:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1084 注:这道题用滚动数组优化反而WA,压到三维即可 代码: 1 #include <bi...

ddqb3235的博客 214

hdoj 3376 Matrix Again and hdoj 2686 Matrix 【最大费用最大流】

Matrix Again Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 3453    Accepted Submission(s): 1017 Problem Description Starvae ver

世界很大 1223

HDU_2686_Matrix(最小费用流)

题意:从矩阵起点(1,1) -> (n,n) -> (1,1) 经过点的权值和最大是多少。每个点只能走一次,从(1,1) -> (n,n)只能往右或往下走,从(n,n) -> (1,1)只能往左或往上走。 分析:最小费用最大流。此题跟POJ_2135类似,只不过这里是点只能走一次,那么使用拆点法,把一个点(u)拆成两个点,连边 u -> u + n*n,容量为1,费用为0;然后对于每一个点u,连接右边点和下边点,容量为1,费用为权值的负值,这样子算出来后就是最小费用,再求负值就是最大权值和了。

一点也不二 744

Matrix HDU - 2686(双线程DP)

Matrix HDU - 2686题意:在n*n的棋盘上每个格子中都有一个正整数, 由左上角走到右下角(只能向下, 向右走), 再由右下角走到左上角(只能向上,向左走),且不能重复(走过的格子不能走第二次), 每路过一个格子得到价值为格子中的...

Sirius_han的博客 211

Matrix HDU - 2686 [最大流最大费用]

Matrix HDU - 2686 题意:一个n*n(n&lt;=30)的矩阵,求从(1,1)出发到(n,n)的两条路径,满足除了起点和终点之外,两条路径不得有重复.求最大和 思路: MAXN开小了一直TLE 对于每一个点,可以接一条边到下方和右方 然而对于一个点,只能选择2次.则有流经该点的流&lt;=1 但是原图不能直接构造 于是对每一个节点我们开影子节点(拆点),容量为1,这样...

Haipai1998的博客 279

HDU3376 Matrix Again——最大费用最大流

点这里 题意: 有一个n*n的矩阵,矩阵中每一个方格都有一个权值,现要求你从左上角的点走到右下角的点再走回左上角,除了左上角的点,其他的点均不能重复经过,收益为所有经过的点的权值。求最大收益。相同的题目有HDU2686 Matrix。 题解: 就是最小费用最大流变成了最大费用,还是能很容易看出端倪的。因为每个点只能经过一次,而每个点可能连接着2或4个点;所以为了限流,将每个点x拆分成x和x’,x连接这他左上的点,x与x’连接,x’连接右下的点。这样起到了控制每个点只经过一次的作用。但是左上角...

lllllan 185

hdu 2686 Matrix【费用流】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686代码:#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #i

mfcheer 500
上一篇: HDU 2577 How to Type DP
下一篇: HDU 5057 Argestes and Sequence 分块
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值