IT民工
加油!
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 29 下一页
摘要: 很基础的一个记忆化搜索,但是还是出了点小问题,数组只开到了25.但是我居然想记忆50的值,所以判断返回要从第三种情况开始,前面两种直接返回给定的值。/* Accepted 236K 0MS C++ 717B 2012-04-11 09:39:09 */#include<cstdio>#include<cstring>#include<cstdlib>int w[25][25][25];int dfs( int a, int b, int c){ if( a <= 0 || b <= 0 || c <= 0) return 1; if( a 阅读全文
posted @ 2012-04-11 09:44 找回失去的 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 这是一道求最大子矩阵和的题,之前做过求最大一维数列连续和,所以可以将每列压缩到一列,将二维变成一维,这样枚举所有的情况,找到一个一维最大连续和即可。/* Accepted 216K 32MS C++ 775B 2012-04-11 09:05:12 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 105#define max(a, b) ( a > b ? a : b)const int inf = 0x3f3f3f3f;int t[MAXN][MAXN], a[MAXN 阅读全文
posted @ 2012-04-11 09:13 找回失去的 阅读(158) 评论(0) 推荐(1) 编辑
摘要: 这道题是最小点覆盖的题,用最少的木板将泥地覆盖。我们建图时将横的线段看成二分图的X点,将竖线段看成Y点。将每个横线段和竖线段编号,编号之后将有交点的横线段和竖线段连一条边,求出最大匹配。最小点覆盖=最大匹配。/*Accepted 2440 KB 16 ms C++ 2186 B 2012-07-28 16:18:28*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 55;int xM[MAXN * MAXN / 2], yM[MAXN * MAXN / 2];bool g 阅读全文
posted @ 2012-04-05 23:59 找回失去的 阅读(347) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3020 无向图的最小路径覆盖,问我们每两个相邻的城市可以共用一个无线,最少要多少个无线设备。我们将每个城市编号,相邻的城市连一条边,每个城市都是X中的结点也是Y当中的结点,求出最大匹配后,利用无向图最小路径覆盖的公式:顶点数 – 最大匹配 / 2 = 最小路径覆盖。/*Memory: 976K Time: 16MSLanguage: C++ Result: Accepted*/#include<cstring>#include<cstdio>#include<cstdlib>const int MAXD 阅读全文
posted @ 2012-04-04 17:01 找回失去的 阅读(180) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2594 允许路径重叠的最小路径覆盖,将连通的点(有向)都连成边,这个用floyd来处理,再用匈牙利算法求出最大匹配,最后用公式求出最小路径覆盖。 公式: 顶点数 – 最大匹配 = 最小路径覆盖。/*Memory: 428K Time: 782MSLanguage: C++ Result: Accepted*/#include<cstring>#include<cstdio>#include<cstdlib>const int MAXD = 505;int n, m;bool map[MAXD][MAXD] 阅读全文
posted @ 2012-04-04 16:24 找回失去的 阅读(198) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3041给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次。这里将每行x看成一个X结点,每列Y看成一个Y结点,障碍的坐标x,y看成X到Y的一条边,构建出图后,就变成了找最少的点,使得这些点与所有的边相邻,即最小点覆盖问题。又继续敲了一遍匈牙利算法…/*Memory: 424K Time: 47MSLanguage: C++ Result: Accepted*/#include<cstdio>#include<cstring>#include<cstdlib>#d 阅读全文
posted @ 2012-04-04 13:59 找回失去的 阅读(2703) 评论(0) 推荐(2) 编辑
摘要: 求出次小生成树与最小生成树比较,如果相等则不唯一,否则输出最小生成树的权值。这道题整整花了两个小时的时间,用的是prim算法,用Tlink记录边是否在MST中,然后枚举不在树中的边,用其权值w[u][v]代替max[u][v]。max[u][v]是MST中连结两点u,v唯一的路中权值最大的那条边的权值。/*Memory: 272K Time: 0MSLanguage: C++ Result: Accepted*/#include<cstdio>#include<cstring>#include<cstdlib>const int inf = 0x3f3f3f 阅读全文
posted @ 2012-04-04 11:55 找回失去的 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 这道题要我们找到p门课和n个学生是否存在一种关系,即在一个集合中的学生,每人代表一门课,每门课在这个集合中也有一个代表。求的的最大匹配数是否等于课程总数。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 305bool map[105][MAXN], vis[MAXN];int link[MAXN];int p, n;bool dfs(int u){ int v; for( v = 1; v <= n; v++) if( map[u][v] && !vis[v] 阅读全文
posted @ 2012-04-03 22:06 找回失去的 阅读(161) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1422题意:派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务。每个在一个路口着陆了的伞兵可以沿着街去到其他路口。我们的任务是求出去执行任务的伞兵最少可以是多少个。一个路径覆盖的问题:在一个有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);同样是求出二分图最大匹配数,代码和刚才的差不多,有这样一个公式 //最小路径覆盖 = 顶点... 阅读全文
posted @ 2012-04-03 16:48 找回失去的 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 以下内容转自http://imlazy.ycool.com/post.1603708.html什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到。二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识);第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据二分图匹配这个问题的特点,把最大流算法做了简化,提高了效率。匈牙利算法其实很简单,但是网上搜不到什么说得清楚的文章。所以我决定要写一下。最大流算法的核心问题就是找增广路径(augment path)。匈牙利算法也不例外,它的基本模式就是:初始时最大匹配为空while 找得到增 阅读全文
posted @ 2012-04-03 16:09 找回失去的 阅读(182) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 29 下一页