博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2686 Matrix(最大费用流)
阅读量:5116 次
发布时间:2019-06-13

本文共 2270 字,大约阅读时间需要 7 分钟。

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 a number game in the n*n Matrix. A positive integer number is put in each area of the Matrix.
Every time yifenfei should to do is that choose a detour which frome the top left point to the bottom right point and than back to the top left point with the maximal values of sum integers that area of Matrix yifenfei choose. But from the top to the bottom can only choose right and down, from the bottom to the top can only choose left and up. And yifenfei can not pass the same area of the Matrix except the start and end.
 
Input
The input contains multiple test cases.
Each case first line given the integer n (2<n<30)
Than n lines,each line include n positive integers.(<100)
 
Output
For each test case output the maximal values yifenfei can get.
 
Sample Input
 
2 10 3 5 10 3 10 3 3 2 5 3 6 7 10 5 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9
 
Sample Output
 
28 46 80
 
Author
yifenfei
 
Source
 题意:给一个n*n的距阵。每一个点都有一个值。问从(0,0)到(n-1, n-1)点(仅仅能从左到右 或 从上到下)再回到(0,0)点(仅仅能从右到左 或 下到上)经过的点的值总和最大是多少?每一个点仅仅能走一次。
解题:事实上就是找两条从(0,0)到(n-1,n-1)总和最大的路.拆点法。每一个边容量为1。费用:对于点的本身,边权为点权,非点的边权值为0。
#include
#include
#include
using namespace std;const int MAXN = 10010;const int MAXM = 1001000;const int INF = 1<<30;struct EDG{ int to,next,cap,flow; int cost; //单位价格}edg[MAXM];int head[MAXN],eid;int pre[MAXN], cost[MAXN] ; //点0~(n-1)void init(){ eid=0; memset(head,-1,sizeof(head));}void addEdg(int u,int v,int cap,int cst){ edg[eid].to=v; edg[eid].next=head[u]; edg[eid].cost = cst; edg[eid].cap=cap; edg[eid].flow=0; head[u]=eid++; edg[eid].to=u; edg[eid].next=head[v]; edg[eid].cost = -cst; edg[eid].cap=0; edg[eid].flow=0; head[v]=eid++;}bool inq[MAXN];bool spfa(int sNode,int eNode , int n){ queue
q; for(int i=0; i
0 && cost[v]
0){ init(); for(int i=0; i
1) maxCost+=mapt[n-1][n-1]; minCost_maxFlow(s , t , maxCost , n*n*2); printf("%d\n",maxCost); }}

转载于:https://www.cnblogs.com/bhlsheji/p/5383751.html

你可能感兴趣的文章
基于C#编程语言的Mysql常用操作
查看>>
s3c2440实验---定时器
查看>>
MyEclipse10安装SVN插件
查看>>
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
引用 移植Linux到s3c2410上
查看>>
MySQL5.7开多实例指导
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
poj1201 查分约束系统
查看>>
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>
腾讯元对象存储之文件删除
查看>>