HDU1565_方格取数(1)
给一个数字方阵,你要从中间取出一些数字,保证相邻的两个数字不同时被取出来,求取出来的最大的和是多少?
建立图模型,对于行列的和为奇数的格子,建立一条从原点到达这个点的边,对于行列和为偶数的格子,建立一条从该点到汇点的边,流量均为这个数;对于相邻的格子,建立一条无穷大流量的边,这样要求最大的独立和,我们只要把最小割求出来,总和减去这个最小割就是我们的答案了呢。(EK也不会T哦)
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 555
#define Inf 9999999
using namespace std; int c[maxn][maxn],tag[maxn],pre[maxn],f[maxn];
int a[maxn][maxn];
int n,m,s,t,ans,tot,N=99;
int Q[maxn],bot,top; void _init()
{
s=0,t=n*n+1,ans=tot=0;
memset(c,0,sizeof c);
} void graph()
{
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
if ((i+j)%2==1)
{
int cur=i*n+j-n;
c[s][cur]+=a[i][j];
if (i>1) c[cur][cur-n]+=Inf;
if (i<n) c[cur][cur+n]+=Inf;
if (j>1) c[cur][cur-1]+=Inf;
if (j<n) c[cur][cur+1]+=Inf;
}
else c[i*n+j-n][t]+=a[i][j];
} int EK()
{
N++;
Q[bot=top=1]=s,f[s]=Inf,tag[s]=N;
while (bot<=top)
{
int cur=Q[bot++];
for (int i=s; i<=t; i++)
if (c[cur][i]>0 && tag[i]!=N)
{
tag[i]=N;
pre[i]=cur;
f[i]=min(f[cur],c[cur][i]);
Q[++top]=i;
if (i==t)
{
for (int k=t; k!=s; k=pre[k])
c[pre[k]][k]-=f[t],c[k][pre[k]]+=f[t];
return f[t];
}
}
}
return 0;
} int main()
{
while (scanf("%d",&n)!=EOF)
{
_init();
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++) scanf("%d",&a[i][j]),tot+=a[i][j];
graph();
while (int k=EK()) ans+=k;
printf("%d\n",tot-ans);
}
return 0;
}
HDU1565_方格取数(1)的更多相关文章
- HDU 1565&1569 方格取数系列(状压DP或者最大流)
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- NOIP200003方格取数
NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...
- vijos 1563 疯狂的方格取数
P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签] 背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...
- [HDU 1565+1569] 方格取数
HDU 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- HDU-1565 方格取数(1)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Me ...
- BZOJ 1475: 方格取数( 网络流 )
本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...
- [动态规划]P1004 方格取数
---恢复内容开始--- 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 ...
- P2045 方格取数加强版
P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...
随机推荐
- jquery几秒钟之后跳转页面
<script> window.onload = function() { var el = document.getElementById('js-tip-timer'), i = 5; ...
- python中偏函数的应用
一.什么是偏函数? (1)在Python的functools模块众多的功能中,其中有一个就是偏函数,我们称之为 partial function 模块的概念我们下一篇在细讲. (2)我们都听过偏将军吧 ...
- Object C学习笔记3-对象的使用和定义
1. 如何定义一个对象 在面向对象的语言中,定义一个对象是使用Class关键字,而在Object-C中则是使用@interface,@interface用于定义对象的属性和方法,@implementa ...
- 通过Jmeter对Dubbo接口进行接口及性能测试
dubbo接口/性能测试 dubbo简介 zookeeper简介.安装及配置 dubbo服务端demo dubbo客户端调用 jmeter工程改造及接口调用 读取jmeter参数用于dubbo性能测试 ...
- Python字符串符号:双引号/单引号用法注解。
众所周知python中单引号和双引号常常被我们所使用,例如print.input等等. 但是对于打印输出所引导的字符串大多都是用双引号的形式来做,"Hello,python!",而 ...
- 《how tomcat works》阅读笔记 - 2 - 门面设计模式,避免强制转换
在第二章 2.3节中 try { servlet = (Servlet) myClass.newInstance(); servlet.service((ServletRequest) request ...
- 如何解决zabbix snmp异常超时、不稳定、时通时断:Timeout
针对平时工作中,zabbix snmp出现异常超时.不稳定.时通时断:Timeout while connecting 等的情况,以下我将以使用乐维监控为例,进行解决方案的详细叙述. 一.问题:设 ...
- MCS锁——可伸缩的自旋锁
在编写并发同步程序的时候,如果临界区非常小,比如说只有几条或几十条指令,那么我们可以选择自旋锁(spinlock).使用普通的互斥锁会涉及到操作系统的调度,因此小临界区一般首选自旋锁.自旋锁的工作方式 ...
- Beta Scrum Day 5 — 听说
听说
- ubuntu下编译ffmpeg+SDL+ffplay提取motion vector
编译ffmpeg: 第一步: 从官网http://ffmpeg.org/下载最新版本. 解压tar -xjvf ffmpeg-3.3.1.tar.bz2 进入目录cd ffmpeg-3.3.1 第二步 ...