题意:给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)

现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成0,

这样一共走K次,现在要求K次所达到的方格的数的和最大。

n<=50,k<=10

思路:费用流

将每个点裂成一个出点和一个入点(i,j,1..2),这个思路与最大流类似

(i,j,1)->(i,j,2) 连两条边:

容量为1,费用为a[i,j]

容量为K,费用为0

(i,j,2)->(i+1,j,1)连容量为K,费用为0的边 (i,j+1)类似

(n,n,2)->T 连流量为K,费用为0的边限制流量

跑最大费用最大流就行了,其实就是SPFA的三角不等式改个方向

 var fan:array[..]of longint;
q:array[..]of longint;
head,vet,next,len1,len2:array[..]of longint;
pre:array[..,..]of longint;
inq:array[..]of boolean;
dis:array[..]of longint;
a:array[..,..]of longint;
num:array[..,..,..]of longint;
n,m,k1,i,j,k,tot,s,source,src:longint;
ans:int64; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure add(a,b,c,d:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
len1[tot]:=c;
len2[tot]:=d;
head[a]:=tot; inc(tot);
next[tot]:=head[b];
vet[tot]:=a;
len1[tot]:=;
len2[tot]:=-d;
head[b]:=tot;
end; function spfa:boolean;
var u,t,w,i,e,v:longint;
begin
for i:= to s do
begin
dis[i]:=-maxlongint;
inq[i]:=false;
end;
t:=; w:=; q[]:=source; inq[source]:=true; dis[source]:=;
while t<w do
begin
inc(t); u:=q[t mod (s+)];
inq[u]:=false;
e:=head[u];
while e<> do
begin
v:=vet[e];
if (len1[e]>)and(dis[u]+len2[e]>dis[v]) then
begin
pre[v,]:=u; pre[v,]:=e;
dis[v]:=dis[u]+len2[e];
if not inq[v] then
begin
inc(w); q[w mod (s+)]:=v;
inq[v]:=true;
end;
end;
e:=next[e];
end;
end;
if dis[src]=-maxlongint then exit(false)
else exit(true);
end; procedure mcf;
var k,e:longint;
t:int64;
begin
k:=src; t:=maxlongint;
while k<>source do
begin
e:=pre[k,]; k:=pre[k,];
t:=min(t,len1[e]);
end;
k:=src;
while k<>source do
begin
e:=pre[k,];
len1[e]:=len1[e]-t;
len1[fan[e]]:=len1[fan[e]]+t;
ans:=ans+t*len2[e];
k:=pre[k,];
end;
end; begin
assign(input,'codevs1227.in'); reset(input);
assign(output,'codevs1227.out'); rewrite(output);
readln(n,k1);
for i:= to do
if i mod = then fan[i]:=i+
else fan[i]:=i-;
for i:= to n do
for j:= to n do read(a[i,j]);
for i:= to n do
for j:= to n do
for k:= to do
begin
inc(s); num[i,j,k]:=s;
end;
for i:= to n do
for j:= to n do
begin
add(num[i,j,],num[i,j,],,a[i,j]);
add(num[i,j,],num[i,j,],k1,);
if j+<=n then add(num[i,j,],num[i,j+,],k1,);
if i+<=n then add(num[i,j,],num[i+,j,],k1,);
end;
source:=; src:=s+; inc(s);
add(num[n,n,],src,k1,);
while spfa do mcf;
writeln(ans);
close(input);
close(output);
end.

【Codevs1227】方格取数2(费用流)的更多相关文章

  1. Codevs 1227 方格取数 2(费用流)

    1227 方格取数 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 查看运行结果 题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数 ...

  2. 洛谷 - P2045 - 方格取数加强版 - 费用流

    原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...

  3. 洛谷P2045 方格取数加强版(费用流)

    题意 题目链接 Sol 这题能想到费用流就不难做了 从S向(1, 1)连费用为0,流量为K的边 从(n, n)向T连费用为0,流量为K的边 对于每个点我们可以拆点限流,同时为了保证每个点只被经过一次, ...

  4. LG2045 方格取数加强版 费用流

    问题描述 LG2045 题解 费用流. 套路拆点,把\((i,j)\)拆为两个点,在这两个点之间连边:一条边流量为\(1\),费用为\(a_{i,j}\),另一条边为流量为\(INF\),费用为\(0 ...

  5. [CodeVs1227]方格取数2(最大费用最大流)

    网络流24题的坑还没填完,真的要TJ? 题目大意:一个n*n的矩阵,每格有点权,从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成0,这样一共走 ...

  6. codevs1227:方格取数2

    题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= )现在从(,)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该 ...

  7. poj3422K方格取数——最大费用最大流

    题目:http://poj.org/problem?id=3422 最大费用最大流: 拆点,在自点之间连两条边,一条容量为1,边权为数字:一条容量为k-1,边权为0:表示可以走k次,只有一次能取到数字 ...

  8. codevs1227 方格取数2 注意数组啊啊啊啊啊啊啊啊啊啊

    一开始T了一组RE了一组,实在找不出错来,就把数组加了一个0竟然就多A了一组.很惊讶的又加了几个0最后竟然全A了!!! 懒得做了,改的是之前的那个蚯蚓的游戏问题.还是需要拆点,至于为什么不能重复走结点 ...

  9. HDU 1565&1569 方格取数系列(状压DP或者最大流)

    方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  10. LibreOJ #6007. 「网络流 24 题」方格取数 最小割 最大点权独立集 最大流

    #6007. 「网络流 24 题」方格取数 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

随机推荐

  1. ipsec配置strongswan.conf和ipsec.conf

    配置strongswan.conf vi /usr/local/etc/strongswan.conf # strongswan.conf - strongSwan configuration fil ...

  2. debug1: expecting SSH2_MSG_KEX_ECDH_REPLY解决

    设置mtu ifconfig en1 mtu 1200 代理工具 退出lantern,退出shadowsocks

  3. iOS上架问题解决

    dns问题 http://iphone.91.com/tutorial/syjc/140509/21686339.html 网络问题 手机4g开wifi,上传提交多次 时间问题 东八区下午6点上架成功 ...

  4. HDOJ1195 双向BFS //单向也可以过 没想清

    #include<cstdio> #include<map> #include<vector> #include<stack> #include< ...

  5. CAP 可用性理解

    从容灾角度看可用性. 多机同时返回. 主通过 heart-beat 脑裂. 用 paxos. 性能远距离. 对整体压力较大. 从用户体验的角度看单数据可用性: 不考虑城市灾备的情况发生.只有单机房的 ...

  6. Core Animation演示

    相关代码展示: - (IBAction)toggleRoundCorners:(id)sender { [CATransaction setDisableActions:![_enableAnimat ...

  7. visibilitychange 标签可见性

    var pageVisibility = document.visibilityState;// 监听 visibility change 事件document.addEventListener('v ...

  8. systemverilog之OOP

    what is oop terminology an example class default methods for classes static attibute assigment and c ...

  9. perl学习之内置变量

    Perl内置特殊变量   一.正则表达式特殊变量:1.$n  :包含上次模式匹配的第n个子串2.$& :前一次成功模式匹配的字符串3.$`  :前次匹配成功的子串之前的内容4.$’ :前次匹配 ...

  10. 【css】清楚浏览器端缓存

    /css/common.css?version=1.0.7   在css链接后面加个参数版本号控制,刷新浏览器缓存