2012年3月17日
摘要: http://acm.pku.edu.cn/JudgeOnline/problem?id=3041大意:N*N的方阵中有m个怪兽,每开一枪可以杀死一行或者一列中的所有怪兽。至少要开多少强。算法:将行列看作点,怪兽看作边。即现在需要选择最小的点数来关联所有的边。即求最小点覆盖。即最大匹配。 1 #include<iostream> 2 #define SIZE 501 3 using namespace std; 4 int n,k,x,y; 5 int t[SIZE]; 6 bool v[SIZE],str[SIZE][SIZE]; 7 bool find(int x) 8 { 9 阅读全文
posted @ 2012-03-17 12:36 tiankonguse 阅读(210) 评论(0) 推荐(0)
摘要: 题解:在一个n*m的棋盘上,有一些标志,问最少用多少个1*2的矩形可以把它们全部套住。可以将每一个标志与其相邻的四个标志建一条边,这样就形成了一个无向图,题目的意思即要求最小的边数。使得所有的点都在这些边数。这样就转换成了最小路径覆盖问题。最小路径覆盖=顶点数-最大二分匹配本题是无向图,即二分图中的边是双向边,若1和2匹配的话,那么2和1也匹配,所以本题=顶点数-最大二分匹配/2 1 #include<iostream> 2 using namespace std; 3 const int Row=45; 4 const int Line=15; 5 char str[Row][L 阅读全文
posted @ 2012-03-17 12:33 tiankonguse 阅读(352) 评论(0) 推荐(0)