题意:

假如你如今正处在一个N*N的矩阵中,这个矩阵里面有K个障碍物,你拥有一把武器,一发弹药一次能消灭一行或一列的障碍物,求最小的弹药消灭所有障碍物

输入为:     N K

接下来有K行,每行包括障碍物的坐标,即r行c列;

如:

3 4 

1 1

1 3

2 2

3 2

输出为:     花费最小的弹药数

思路:将i行作为X集合。将j列作为Y集合。这样原来的问题—用最少的炮弹打掉所有障碍物,转化为了这么一个问题:

在二分图中选择尽量少的点,使得每条边至少有一个端点被选中

裸的最小点覆盖问题,运用结论:最小覆盖数等于最大匹配数  就可以

代码例如以下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N = 600;
int n, k;
bool lin[N][N];
int used[N], arr[N]; bool find(int x)
{
for(int j = 1; j <= n; j++)
{
if(lin[x][j] == true && used[j] == 0)
{
used[j] = 1;
if(arr[j] == 0 || find(arr[j]))
{
arr[j] = x;
return true;
}
}
}
return false;
} int main()
{
int r, c;
while(~scanf("%d%d", &n, &k))
{
memset(lin, false , sizeof(lin));
memset(arr, 0, sizeof(arr));
for(int i = 1; i <= k; i++)
{
scanf("%d%d", &r, &c);
lin[r][c] = true;
}
int all = 0;
for(int i = 1; i <= n; i++)
{
memset(used, 0, sizeof(used));
if(find(i))
all++;
}
printf("%d\n", all);
}
return 0;
}

最新文章

  1. iOS 适配https(AFNetworking3.0为例)
  2. Windows Server 2008 R2 域控服务器运行nslookup命令默认服务器显示 UnKnown
  3. [android]AndroidInject框架——我的第一个android小型框架
  4. shiro学习中报错解决方法
  5. ArcGIS实现在线与线交叉处打断线(批量)
  6. ASP.NET会话(Session)保存模式--终于知道session为什么丢失了
  7. The Ninth Hunan Collegiate Programming Contest (2013) Problem G
  8. [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表
  9. (转)SSI开发环境搭建
  10. git cheat sheet,git四张手册图
  11. ring3 hook ZwWriteVirtualMemory
  12. LoadRunner入门(一)
  13. RPM挂载光盘(使用iso里面的来搭建yum环境)就是离线模式,
  14. ffmpeg日志调式
  15. 根据URL地址获取对应的HTML,根据对应的URL下载图片
  16. [HNOI2005]狡猾的商人 ,神奇做法——贪心
  17. 从零搭建ES搜索服务(一)基本概念及环境搭建
  18. HDU 3526 Computer Assembling(最小割)
  19. MFC 控件使用教程
  20. WINDOWS消息和窗口简介

热门文章

  1. sql中多层循环示例(有游标)
  2. Ubuntu 搭建etcd
  3. 美团外卖商家获取订单-signToken取值
  4. centos7.3 chrome 安装
  5. 多线程-TaskExecutor-使用Demo
  6. 【Java】 foreach对数组赋值问题
  7. ThinkPHP导入第三方类库Vendor
  8. 把对象转换成JSON形式的html代码
  9. 牛客练习赛1 A - 矩阵
  10. 在静态方法中应用spring注入的类