棋盘游戏

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3372    Accepted Submission(s): 1997

Problem Description
小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。
所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么?
Input
输入包含多组数据,
第一行有三个数N、M、K(1<N,M<=100 1<K<=N*M),表示了棋盘的高、宽,以及可以放“车”的格子数目。接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。
Output
对输入的每组数据,按照如下格式输出:
Board T have C important blanks for L chessmen.
Sample Input
3 3 4 1 2 1 3 2 1 2 2 3 3 4 1 2 1 3 2 1 3 2
Sample Output
Board 1 have 0 important blanks for 2 chessmen. Board 2 have 3 important blanks for 3 chessmen.
Author
Gardon
Source
杭电ACM集训队训练赛(VI)
题意:如果某点不放棋子就不能达到最大的车;问这个点数的最大值
把车当成连接x,y的一条边,求最多能放车的数量就是求最大匹配,即x,y的匹配
求不重要的点就暴力枚举每一个点,假设没有这个点看看匹配数是否变小,这个做法很好

 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棋盘游戏(匹配+好题)相关推荐

  1. UOJ#80 二分图最大权匹配 [模板题]

    从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,-,nl1,-,nl 和 1,-,nr1,-,nr. 有若干个这样的条件:第 vv 个男生和第 uu 个女生愿意结为 ...

  2. UVALive 6525 Attacking rooks 二分匹配 经典题

    题目链接:点击打开链接 题意: 给定n*n的棋盘, 能够在'.'上摆 象棋中的车(X是墙壁) 使得随意两个车都不能互相攻击到 问:最多能摆多少个车. 思路: 二分匹配 1.若没有X.那么做法就是 X点 ...

  3. HDU 2255 二分图最佳匹配 模板题

    题目大意: 给定每一个人能支付的房子价值,每个人最多且必须拥有一套房子,问最后分配房子可得到的最大收益 抄了个别人的KM模板,就这样了... 1 #include <cstdio> 2 # ...

  4. 【网络流24题】搭配飞行员(最大流+二分图匹配)

    传送门 搭配飞行员     题意:二分图匹配裸题,不多说 I think Dinic算法跑最大流解决||匈牙利算法 Code 代码一:Dinic #include<cstdio> #inc ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 棋盘游戏(二分图最大匹配)

    棋盘游戏(二分图最大匹配) 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的"车",并且使得他们不能互相攻击,这当然很简单,但是Gardon ...

  7. POJ2536 二分图匹配

    题意:      有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...

  8. LeetCode 43字符串相乘44通配符匹配

    原创公众号:bigsai,回复进群加入力扣打卡群. 字符串相乘 题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形 ...

  9. ZOJ-1654 Place the Robots 拆行拆列构图+二分匹配 Or 最大独立点集+TLE

    题意:给定一个方格,格子中的每点由空地,草地和墙组成,每个空地可以放置一个机器人,每个机器人能够向四个方向扫射激光,所以要给定一种方案能够在棋盘上放置足够多的机器人.激光可以穿过草地但是不能够穿过墙. ...

最新文章

  1. 百万粉女极客突袭深圳手机公司:你们说想要源码就来自取?我来了
  2. Fedora 17安装NVIDIA显卡驱动
  3. Zookeeper与Paxos
  4. 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数
  5. MySQL两千万数据优化迁移
  6. Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译
  7. 不小心执行 rm -f,该如何恢复?
  8. Java开发者薪资最低?程序员只能干到30岁?国外真的没有996?Intellij真的比Eclipse受欢迎?
  9. keepalived原理和安装
  10. 【第二组】项目冲刺(Beta版本)第五次每日例会 2017/7/23
  11. 2020C证(安全员)考试题及C证(安全员)考试题库
  12. UEFI Boot Flow 系列之 SEC Phase
  13. 诺基亚牌WP7手机——蛮期待的
  14. 创建jira sprint_如何在Excel中创建高级sprint燃尽图
  15. Oracle创建HR示例模式
  16. 遥感图像语义分割各公开数据集
  17. 安农计算机学院在哪个门附近,千万不要去安农大,因为……
  18. python学习笔记3(字符串)
  19. 计算机英语中poke什么意思,poke是什么意思_poke在线翻译_英语_读音_用法_例句_海词词典...
  20. 如何安全升级 TiDB

热门文章

  1. 【C语言项目】贪吃蛇游戏(下)
  2. 【Android】Android模拟器无法上网问题
  3. 事务回滚什么意思 try_三问Spring事务:解决什么问题?如何解决?存在什么问题?...
  4. python 类属性排序_Python实现多属性排序的方法
  5. win8中计算机的工具在哪,Win8画图工具在哪,Win8怎么打开画图?
  6. c语言 求方程ax,关于求方程ax2+bx+c=0根的问题
  7. bat产品经理能力模型_产品经理如何构建自己的产品能力模型?
  8. C语言 指针 类型的用法大汇总(指针/引用/取值) *与
  9. 从 Demo 中学习 Solidity
  10. 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验四