codevs 1227 方格取数 2
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
恩......说实话这道题应该是网络流的题,但是想了半天也没有想出来......膜了网上的题解后才发现,这是道费用流的题(亏我一直在想怎么控制和最大)
知道这是费用流的以后就很好办了。由于每个点可能有两种情况,即之前没经过这个点时走到这个点,和之前已经走过这个点了。前一种情况需要计算贡献,而后一种情况则不需要。
然后,我们考虑如何控制这两种情况。我们可以将每个点x拆开,拆为x1与x2。这样每次从x1走到x2时就可以把这个点的贡献给算进去。由于前一种情况只有一次,而后一种情况最多有k-1次,所以我们在x1与x2之间连两种边,一种容量为1,费用为这个节点的值(对应第一种情况),另一种容量为k-1,费用为0(对应第二种情况)。然后考虑这个点往下和往右连边,假设这两个点分别为y,z,那么从x2往y1、z1分别连一条容量为k,费用为0的边即可(自己想一想,不难的)。然后跑一遍最大费用最大流即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 100010
#define INF (1<<28)
#define r(j) (j^1) using namespace std;
typedef long long llg; int head[maxn],to[maxn],next[maxn],c[maxn],f[maxn],ff[maxn];
int n,k,tt=,ans,dis[maxn],d[maxn],fa[maxn],d2[maxn],l,r,hui;
bool w[maxn]; void link(int x,int y,int z,int o){
to[++tt]=y;next[tt]=head[x];head[x]=tt;
to[++tt]=x;next[tt]=head[y];head[y]=tt;
c[tt-]=z; f[tt-]=o; f[tt]=-o;
} bool spfa(){
for(int i=;i<=hui;i++) dis[i]=-,d2[i]=INF;
dis[]=; l=r=; d[r++]=; w[]=;
while(l!=r){
int u=d[l++]; l%=maxn; w[u]=;
for(int i=head[u],v;v=to[i],i;i=next[i])
if(c[i]> && dis[v]<dis[u]+f[i]){
dis[v]=dis[u]+f[i];
d2[v]=min(d2[u],c[i]);
fa[v]=u; ff[v]=i;
if(!w[v]){
w[v]=;d[r++]=v;
r%=maxn;
}
}
}
if(dis[hui]==-) return ;
ans+=dis[hui]*d2[hui];
int now=hui;
while(now!=){
c[ff[now]]-=d2[hui];
c[r(ff[now])]+=d2[hui];
now=fa[now];
}
return ;
} int main(){
File("a");
scanf("%d%d",&n,&k);hui=n*n<<;
for(int i=,now=,x;i<=n;i++)
for(int j=;j<=n;j++,now++){
scanf("%d",&x);
link(now,now+n*n,,x); link(now,now+n*n,k-,);
if(j<n) link(now+n*n,now+,k,);
if(i<n) link(now+n*n,now+n,k,);
}
while(spfa());
printf("%d",ans);
return ;
}
codevs 1227 方格取数 2的更多相关文章
- Codevs 1227 方格取数 2(费用流)
1227 方格取数 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 查看运行结果 题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数 ...
- Codevs 1043 方格取数
1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- 【wikioi】1227 方格取数 2(费用流)
http://www.wikioi.com/problem/1227 裸题,拆点,容量为1,费用为点权的负数(代表只能取一次).再在拆好的两个点连边,容量为oo,费用为0.(代表能取0) 然后向右和下 ...
- codevs 1907 方格取数 3
Description 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. Input 第 ...
- 【费用流】【CODEVS】1227 方格取数2
[算法]最小费用最大流(费用流) [题解] 费用流:http://www.cnblogs.com/onioncyc/p/6496532.html 本题构图: 在有限的k次行走中尽可能多的拿到数字,明显 ...
- codevs——T1043 方格取数
http://codevs.cn/problem/1043/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 De ...
- codevs 1043 方格取数 2000年NOIP全国联赛提高组
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...
- codevs 方格取数
1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- tyvj 1884 [NOIP2000T4]方格取数 || codevs 1043 dp
P1884 [NOIP2000T4]方格取数 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 [noip2000T4]方格取数 描述 设有N*N的方格图(N& ...
随机推荐
- Mac wifi已打开但尚未连接到网络
把网络偏好设置 里面的询问新网络 关闭了 然后 重启电脑 试一下 应该就可以了
- 安装和使用cocoapods
第一步:查看自己电脑的Ruby环境:gem sources -l 1.如果已经是taobao镜像了[https://ruby.taobao.org/],此时不需要环境的修改了,直接进入第二步 2.(1 ...
- Moinmoin wiki 中文附件名的解决办法
参考: 让MoinMoin支持上传中文文件名的附件 http://www.linuxsir.org/bbs/thread368571.html 在1.9.7中修改解决. MOINMOINWIKI1 ...
- js 变量与值 连写
window.location.href="index.php?app=memberpmrecord&act=get_download&bname="+busine ...
- 在线研讨会webinars
我是怎么一步一步找到这里的? jedox-jedox Webinars (不懂意思)--->google [ webinars open source ],->htt ...
- 含有SilverLight项目的代码重用
很多时候,我们工程中不只是有SilverLight项目,然而我们想把其他的项目中的工具类,或者实体类复用到SilverLight项目中时,会发现SilverLight项目无法使用.这是个很普遍的现象. ...
- 继续说一下2016里面的json功能(1)
首先先来测试数据,数据是使用之前的,就 不要在意这些细节了啊~ 借用上一篇的测试数据 ),Chinese int ,Math int) ,),(,),(,),(,null); 然后我们使用这个表里面生 ...
- itext 实现pdf打印数字上标和下标
https://kathleen1974.wordpress.com/category/itext-pdf/ In one of my project, we need to give the use ...
- hadoop2.3cdh5.0.2 upgrade to hadoop2.5cdh5.5.0
两台机器,nn1,nn2搭建的ha,同时又担任nn,dn,rm,nm,jn,zkfc,zk等职能. 以下是升级回滚再升级的记录.仅供参考,同时参考了cdh官网的说明,官网主要是使用CM的. 1 官网上 ...
- [书目20160526]Brain Rules 让大脑自由:释放天赋的12条定律
推荐序1 12条定律,让大脑更聪明推荐序2 走过迷雾地带前 言 人人都有一个不可思议的大脑 定律1:越运动,大脑越聪明 信不信,“驴友”比“沙发土豆”更聪明! 老板,请把办公室的咖啡机换成跑步机! ...