博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CODEVS_1227 方格取数2 网络流 最小费用流 拆点
阅读量:5963 次
发布时间:2019-06-19

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

原题链接:http://codevs.cn/problem/1227/

题目描述 
Description

给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成0,这样一共走K次,现在要求K次所达到的方格的数的和最大

输入描述 
Input Description

第一行两个数n,k(1<=n<=50, 0<=k<=10)

接下来n行,每行n个数,分别表示矩阵的每个格子的数

输出描述 
Output Description

一个数,为最大和

样例输入 
Sample Input

3 1

1 2 3

0 2 1

1 4 2

样例输出 
Sample Output

11

数据范围及提示 
Data Size & Hint

1<=n<=50, 0<=k<=10

这道题是道很裸的拆点最小费用流,每个点拆开后建两条边,一条费用是-a[i][j],容量为1,另一条费用是0,容量为INF。其余的都用费用为0,容量为INF的边连接,每个点连到汇点。最后最小费用流的相反数就是答案。详见代码:

#include
#include
#include
#include
#include
#include
#include
#define MAX_N 55#define MAX_V 6000#define INF 1008611using namespace std;int K,N;int a[MAX_N][MAX_N];struct edge{int to,cap,cost,rev;};int V=0;vector
G[MAX_V];int dist[MAX_V];int prevv[MAX_V],preve[MAX_V];void add_edge(int from,int to,int cap,int cost){ G[from].push_back((edge){to,cap,cost,G[to].size()}); G[to].push_back((edge){from,0,-cost,G[from].size()-1});}char cc;int min_cost_flow(int s,int t,int f){ int res=0; while(f>0) { fill(dist,dist+V,INF); dist[s]=0; bool update=1; while(update) { update=0; for(int v=0;v
0&&dist[e.to]>dist[v]+e.cost) { //cout<<"*"<
>N>>K; for(int i=0;i
>a[i][j]; V=N*N*2+1; for(int i=0;i

转载于:https://www.cnblogs.com/HarryGuo2012/p/4524042.html

你可能感兴趣的文章
和transformjs一起摇摆
查看>>
8 行 Node.js 代码实现代理服务器
查看>>
水印,图片验证码
查看>>
Ansible8:Playbook循环【转】
查看>>
关于stm32的正交解码
查看>>
marathon新建应用映射端口限制
查看>>
vs2015 编译时错误列表中没有错误,dll却没有生成出来
查看>>
[转]How to override HandleUnauthorizedRequest in ASP.NET Core
查看>>
C# list介绍
查看>>
概率霍夫变换(Progressive Probabilistic Hough Transform)原理详解
查看>>
Mac下快速新建txt文件
查看>>
谷歌浏览器chrome设置特定网页使用Https(ssl)访问
查看>>
[NPM] Use a shorthand syntax for running multiple npm scripts with npm-run-all
查看>>
MySQL中函数CONCAT及GROUP_CONCAT
查看>>
java中写sql语句的小小细节
查看>>
Android中BitmapFactory.Options详解
查看>>
跟着百度学PHP[13]-文件上传
查看>>
SQL SERVER 2000安装教程图文详解
查看>>
Android滑动到顶部悬停
查看>>
c#通过反射移除所有事件
查看>>