HD1281棋盘游戏(匹配+好题)
棋盘游戏
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3372 Accepted Submission(s): 1997
所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么?
![](http://acm.hdu.edu.cn/data/images/C21-1008-1.gif)
第一行有三个数N、M、K(1<N,M<=100 1<K<=N*M),表示了棋盘的高、宽,以及可以放“车”的格子数目。接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。
Board T have C important blanks for L chessmen.
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 const int MAX = 110; 7 int g[MAX][MAX],vis[MAX],link[MAX]; 8 int n,m,k; 9 int findx(int x) 10 { 11 for(int i = 1; i <= m; i++) //注意这是m 12 { 13 if(g[x][i] == 1 && vis[i] == 0) 14 { 15 vis[i] = 1; 16 if(link[i] == 0 || findx(link[i])) 17 { 18 link[i] = x; 19 return true; 20 } 21 } 22 } 23 return false; 24 } 25 int getsum() 26 { 27 int sum = 0; 28 memset(link,0,sizeof(link)); 29 for(int i = 1; i <= n; i++) 30 { 31 memset(vis,0,sizeof(vis)); 32 if(findx(i)) 33 sum++; 34 } 35 return sum; 36 } 37 int main() 38 { 39 int t = 0; 40 while(scanf("%d%d%d", &n,&m,&k) != EOF) 41 { 42 int x,y,sum = 0,important = 0; 43 memset(g,0,sizeof(g)); //初始化 44 for(int i = 0; i < k; i++) 45 { 46 scanf("%d%d",&x,&y); 47 g[x][y] = 1; 48 } 49 sum = getsum(); 50 51 for(int i = 1; i <= n; i++) 52 { 53 for(int j = 1; j <= m; j++) 54 { 55 if(g[i][j]) 56 { 57 g[i][j] = 0; 58 if(sum > getsum()) 59 important++; 60 g[i][j] = 1; 61 } 62 } 63 } 64 printf("Board %d have %d important blanks for %d chessmen.\n",++t,important,sum); 65 } 66 return 0; 67 }
View Code
转载于:https://www.cnblogs.com/zhaopAC/p/5005293.html
HD1281棋盘游戏(匹配+好题)相关推荐
- UOJ#80 二分图最大权匹配 [模板题]
从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,-,nl1,-,nl 和 1,-,nr1,-,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...
- UVALive 6525 Attacking rooks 二分匹配 经典题
题目链接:点击打开链接 题意: 给定n*n的棋盘, 能够在'.'上摆 象棋中的车(X是墙壁) 使得随意两个车都不能互相攻击到 问:最多能摆多少个车. 思路: 二分匹配 1.若没有X.那么做法就是 X点 ...
- HDU 2255 二分图最佳匹配 模板题
题目大意: 给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益 抄了个别人的KM模板,就这样了... 1 #include <cstdio> 2 # ...
- 【网络流24题】搭配飞行员(最大流+二分图匹配)
传送门 搭配飞行员 题意:二分图匹配裸题,不多说 I think Dinic算法跑最大流解决||匈牙利算法 Code 代码一:Dinic #include<cstdio> #inc ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 棋盘游戏(二分图最大匹配)
棋盘游戏(二分图最大匹配) 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的"车",并且使得他们不能互相攻击,这当然很简单,但是Gardon ...
- POJ2536 二分图匹配
题意: 有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...
- LeetCode 43字符串相乘44通配符匹配
原创公众号:bigsai,回复进群加入力扣打卡群. 字符串相乘 题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形 ...
- ZOJ-1654 Place the Robots 拆行拆列构图+二分匹配 Or 最大独立点集+TLE
题意:给定一个方格,格子中的每点由空地,草地和墙组成,每个空地可以放置一个机器人,每个机器人能够向四个方向扫射激光,所以要给定一种方案能够在棋盘上放置足够多的机器人.激光可以穿过草地但是不能够穿过墙. ...
最新文章
- 百万粉女极客突袭深圳手机公司:你们说想要源码就来自取?我来了
- Fedora 17安装NVIDIA显卡驱动
- Zookeeper与Paxos
- 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数
- MySQL两千万数据优化迁移
- Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译
- 不小心执行 rm -f,该如何恢复?
- Java开发者薪资最低?程序员只能干到30岁?国外真的没有996?Intellij真的比Eclipse受欢迎?
- keepalived原理和安装
- 【第二组】项目冲刺(Beta版本)第五次每日例会 2017/7/23
- 2020C证(安全员)考试题及C证(安全员)考试题库
- UEFI Boot Flow 系列之 SEC Phase
- 诺基亚牌WP7手机——蛮期待的
- 创建jira sprint_如何在Excel中创建高级sprint燃尽图
- Oracle创建HR示例模式
- 遥感图像语义分割各公开数据集
- 安农计算机学院在哪个门附近,千万不要去安农大,因为……
- python学习笔记3(字符串)
- 计算机英语中poke什么意思,poke是什么意思_poke在线翻译_英语_读音_用法_例句_海词词典...
- 如何安全升级 TiDB
热门文章
- 【C语言项目】贪吃蛇游戏(下)
- 【Android】Android模拟器无法上网问题
- 事务回滚什么意思 try_三问Spring事务:解决什么问题?如何解决?存在什么问题?...
- python 类属性排序_Python实现多属性排序的方法
- win8中计算机的工具在哪,Win8画图工具在哪,Win8怎么打开画图?
- c语言 求方程ax,关于求方程ax2+bx+c=0根的问题
- bat产品经理能力模型_产品经理如何构建自己的产品能力模型?
- C语言 指针 类型的用法大汇总(指针/引用/取值) *与
- 从 Demo 中学习 Solidity
- 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验四