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

本文共 2167 字,大约阅读时间需要 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); }}

转载地址:http://zsrja.baihongyu.com/

你可能感兴趣的文章
vsftpd服务详解
查看>>
Python13_day3
查看>>
UESTC 2014 Summer Training #16 Div.2
查看>>
使用yum工具下载rpm包
查看>>
NIO入门系列之第7章:文件锁定
查看>>
未来的茫然,或是计划
查看>>
我的友情链接
查看>>
kill
查看>>
项目范围管理论文的提纲
查看>>
Linux基础
查看>>
有的放矢,在性能测试中使用的 10 个微观指标
查看>>
如何修改wordpress博客默认管理员用户名称
查看>>
centos7部署phpipam(ip管理系统)
查看>>
c# 基础任务1
查看>>
获取root权限
查看>>
每周一荐:TotalCommand的文件夹同步功能
查看>>
day2-Samba
查看>>
【转向Javascript系列】深入理解Generators
查看>>
大数据概述
查看>>
★Kali信息收集~2.Whois :域名信息
查看>>