hdu1045 - 贪心,二分图

左边白方格里放小球,满足同一行、列只有一个(被黑块隔开)。问最多放多少个球。
------------------------------------------------------------------------------------------------------------
从贪心类别看到这个题的,读完题后只能想到枚举的解法 ==。智商有限。
看了题解后才知道怎么贪心,还有一个最大二分匹配的解法。
1.枚举
依次判断每个格子能不能放小球,如果能则返回 max{dfs(放),dfs(不放)},否则返回dfs(不放).
#define _CRT_SECURE_NO_DEPRECATE
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #define MAX(a,b) ((a)>=(b)?(a):(b))
#define MIN(a,b) ((a)<=(b)?(a):(b))
#define OO 0x0fffffff
typedef long long LL;
using namespace std;
typedef pair<int, int> int2;
const int dir[][] = { { , }, { -, }, { , }, { , - } };
char status[][];
int2 dots[];
int dotcnt;
int n; int dfs(int depth){
if (depth == dotcnt){
int ret = ;
for (int i = ; i<n; i++) for (int j = ; j<n; j++) if (status[i][j] == '*') ret++;
return ret;
}
int x = dots[depth].first;
int y = dots[depth].second;
bool flag = true; for (int i = ; i<; i++){
for (int j = ; flag; j++){
int tx = x + dir[i][] * j;
int ty = y + dir[i][] * j;
if (tx< || ty< || tx >= n || ty >= n) break;
if (status[tx][ty] == 'X') break;
if (status[tx][ty] == '*') { flag = false; break; }
}
}
int no = dfs(depth + );
if (flag) {
status[x][y] = '*';
int yes = dfs(depth + );
status[x][y] = '.';
return max(no,yes);
}
else return no;
} int main(){
while (scanf("%d", &n), n){
dotcnt = ;
for (int i = ; i<n; i++) {
scanf("%s", status[i]);
for (int j = ; j<n; j++)
if (status[i][j] != 'X') dots[dotcnt++] = make_pair(i, j);
}
printf("%d\n", dfs());
}
return ;
}
2. 贪心
统计每个白块所在行和列的连通区域的面积s,从第一排开始处理,找到s最小的块,标记,继续找第一排中最小的,如果没有了则挪到下一排。
3. 二分匹配
现在还没复习到二分图,只写一下二分图的构造:
a. 列收缩。所有列中每一个联通的白块看做一个点。记该序列为A;
b. 行收缩。得到序列B;
c. 连边。对所有(a,b)属于(A,B),如果ab相交则连一条边
接下来就是最大二分匹配了
hdu1045 - 贪心,二分图的更多相关文章
- 洛谷$P1155$ 双栈排序 贪心+二分图匹配
正解:贪心+二分图匹配 解题报告: 传送门$QwQ$ 跪了,,,我本来以为我$NOIp$做得差不多了,,,然后康了一眼发现没做多少啊其实$QAQ$ 然后来康题趴$QwQ$ 首先考虑如果只有一个栈的情况 ...
- 【题解】 [ZJOI2008] 泡泡堂(贪心/二分图/动态规划)
懒得复制,戳我戳我 Solution: 就是有一个贪心策略:(以下假设使\(A\)队分数更高) \(First:\)比较两个分值的最小值,如果\(A\)最小分比\(B\)最小分大就直接比较两个最小的, ...
- 【bzoj4950】【 [Wf2017]Mission Improbable】贪心+二分图匹配
(上不了p站我要死了,侵权度娘背锅) Description 那是春日里一个天气晴朗的好日子,你准备去见见你的老朋友Patrick,也是你之前的犯罪同伙.Patrick在编程竞赛 上豪赌输掉了一大笔钱 ...
- vijos 1605 双栈排序 - 贪心 - 二分图
题目传送门 传送门I 传送门II 题目大意 双栈排序,问最小字典序操作序列. 不能发现两个数$a_{j}, a_{k}\ \ (j < k)$不能放在同一个栈的充分必要条件时存在一个$i$使得$ ...
- HDU1045(KB10-A 二分图最大匹配)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 【贪心 二分图 线段树】cf533A. Berland Miners
通过霍尔定理转化判定方式的一步还是很妙的 The biggest gold mine in Berland consists of n caves, connected by n - 1 transi ...
- HDU1045(二分图经典建模)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告
P1640 [SCOI2010]连续攻击游戏 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备 ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
随机推荐
- c#设计模式(1)
本文摘取自吕震宇的博客园文章,版权归吕震宇仅供个人学习参考.转载请标明原作者吕震宇. 这学期开设设计模式课程,将课件放上来. 课本:<C#设计模式>,电子工业出版社,ISBN 7-5053 ...
- .NET MVC Dropzone 上传图片
在nuget控制台输入:Install-Package dropzone @{ Layout = null; } <!DOCTYPE html> <html> <head ...
- win7系统桌面上图标都变成lnk后缀
1.右键点击空白处,选择“新建”,点击“文本文档”: 2.将文档命名为“1”,后缀名改为inf: 3.双击打开,复制以下内容: [Version] Signature="$Chicago$& ...
- Linux基础、常用命令
Linux作为IT程序员必知必会知识,将自己学习到的和最近工作常用的一些命令进行总结,作为我结束过去生活和开始类程序员的序吧! 如果你想系统性学习的话,还是建议看书(鸟哥的Linux私房菜)或网上视频 ...
- CF #487 (Div. 2) D. A Shade of Moonlight 构造_数形结合
题意: 给 nnn个长度为 lll 且互不相交的开区间 (xi,xi+l)(x_{i}, x_{i}+l)(xi,xi+l) ,每个区间有一个移动速度 vvv,v∈1,−1v∈1,-1v∈1,−1 ...
- Vue学习之路第九篇:双向数据绑定 v-model指令
1.学习准备: ①:双向数据绑定可以简单理解为:后端定义的数据改变,前端页面展示的时候会自动改变,数据通过前端页面修改的时候,后端定义的数据内容也会随之改变. ②:指令中只有v-model可以实现双向 ...
- debian 9 添加源
1.将下面内容的添加入/etc/apt/sources.list(香港镜像) #For software deb http://mirrors.ustc.edu.cn/debian/ stretch ...
- 洛谷10月月赛II
#A: P4924 [1007]魔法少女小Scarlet 这道题考了矩阵旋转 其实很考验推公式的能力和代码能力 这里有个小技巧 可以设(x, y)为原点,然后去推公式,然后实际操作中横坐标加上x,纵坐 ...
- 利用 ST-LINK Utility软件下载程序
先在电脑上安装STM32 ST-LINK Utility,软件安装一路Next就可以了,安装好软件之后界面如下: 下载程序只需要使用3个图标就可以了 第一个图标Connect to the ta ...
- C 语言中函数的跳转
1.同一个函数内,可以使用goto语句: eg: void text_1( void ) { char i=0; a : i++; printf ( " text_1 = %d \r\n& ...