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 ...
随机推荐
- Django后台创建
1.首先创建Django工程 创建Django有两种方法我用的是pycharm的创建 2.查看url.py 如下 from django.contrib import admin from djang ...
- 错误:com.android.builder.packaging.DuplicateFileException: Duplicate files copied
File2: C:\Users\guoxw\.gradle\caches\modules-2\files-2.1\org.jsoup\jsoup\1.10.3\b842f960942503cf1abb ...
- ffmpeg常用指令
在osx系统下通过ffmpeg查看设备 ffmpeg -f avfoundation -list_devices true -i "" -f 指定的是输入输出格式, -i指定输入的 ...
- Sybase to Oracle Golden Gate
Sybase 安装Golden Gate: 下载,然后create subdirs.并且在两端配置好mgr,设置好端口7809 创建golden gate用户ogguser,并且给它授权sa和repl ...
- ZBrush 4R7中自定义笔刷
为了便于雕刻,ZBrush®很人性化地设计了自定义笔刷.随着ZBrush软件版本不断更新,功能也在不断完善.只是在笔刷面板ZBrush软件就为用户提供了上百种之多,如果我们想要用某种笔刷,一个个找起来 ...
- JSP 点击量统计!
详细JSP课程:阿里云大学——开发者课堂 有时候我们需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上. 要实现一个计数器,您 ...
- Jquery 过滤器(first,last,not,even,odd)的使用和区别
Jquery 过滤器主要有first,last,not,even,odd等等,它们分别表示: 代码如下: $(function(){ $("#menu li:first").cli ...
- BZOJ2194: 快速傅立叶之二 FFT_卷积
Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...
- (2)pyspark建立RDD以及读取文件成dataframe
别人的相关代码文件:https://github.com/bryanyang0528/hellobi/tree/master/pyspark 1.启动spark (1)SparkSession 是 S ...
- Redis:持久化之RDB和AOF
Redis:持久化之RDB和AOF RDB(Redis DataBase) 在指定的时间间隔内将内存中的数据集快照写入硬盘 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. R ...