2012年9月12日

HDU 4283(2012天津赛区网赛1006)

摘要: 这一题用的是Dp,Dp[i][j][k]表示第i到j区间内已经上台k时所取得的最小值 1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 7 #define INF 0x7fffffff 8 #define MAXN 105 9 10 int dp[MAXN][MAXN][MAXN];11 int a[MAXN];12 int n;13 14 15 int dfs(int s,int e,int 阅读全文

posted @ 2012-09-12 19:59 我的ACM之路 阅读(343) 评论(0) 推荐(0) 编辑

2012年8月16日

HDU 3338 Kakuro Extension

摘要: 这一题花了我一晚上才搞定,不过蛮开心的。题目大意:原数谜是个很有趣的游戏,如图,每一行或每一列空白称为一个回,每一回都对应着一个整数sum,sum就是这回的和。这些空白格里只能填入1—9这九个数字,且在每一回中不能重复。全黑色的格为空,有数字的格,左下角的表示列的和,右上角的表示行的和,则可以得到下面这个图。但这道题不是原来的数谜,这题与原数谜相比,少了一点规则,就是,每一回中出现的数字可以重复。给你一个n * m 的图,让你填充一下。这题可以用网络流做。以空白格为节点,假设流是从左流入,从上流出的,流入的容量为行和,流出来容量为列和,其余容量不变。求满足的最大流。由于流量有上下限限制,可以给 阅读全文

posted @ 2012-08-16 22:49 我的ACM之路 阅读(733) 评论(0) 推荐(0) 编辑

2012年8月14日

ACM 常见算法

摘要: ACM算法一、数论算法 1.求两数的最大公约数 2.求两数的最小公倍数 3.素数的求法 A.小范围内判断一个数是否为质数: B.判断longint范围内的数是否为素数(包含求50000以内的素数表):二、图论算法1.最小生成树A.Prim算法: B.Kruskal算法:(贪心) 按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。2.最短路径 A.标号法求解单源点最短路径: B.Floyed算法求解所有顶点对之间的最短路径: C. Dijkstra 算法:3.计算图的传递闭包4.无向图的连通分量 A.深度优先 B 宽度优先(种子染色法)5.关键路径 几个定义: 顶点1为源点,n为汇 阅读全文

posted @ 2012-08-14 20:21 我的ACM之路 阅读(3888) 评论(0) 推荐(1) 编辑

2012年8月13日

POJ 1325 Machine Schedule

摘要: 首先构造二部图,把A的n个model和B的n个model看作图的顶点,如果某个任务可以在A上的_imodel或者B上的_jmodel上完成,则Ai,Bj链接一条线,建立一个关系。那么本体就转化为求二部图的最小点覆盖集问题了View Code 1 #include<iostream> 2 using namespace std; 3 #define MAXN 105 4 int n1,n2; 5 int hn; 6 int g[MAXN][MAXN]; 7 int ans; 8 int sx[MAXN],sy[MAXN]; 9 int cx[MAXN],cy[MAXN];10 11 阅读全文

posted @ 2012-08-13 23:38 我的ACM之路 阅读(190) 评论(0) 推荐(0) 编辑

POJ 1469 COURSES

摘要: 很明显,本题目求的是二分图的最大匹配问题,只要匹配等于课程门数,就可以结束程序输出“YES”,否则当循环完之后还没有覆盖住所有的课程,则输出‘NO’View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 #define MAXN 301 6 int match[MAXN]; 7 int map[MAXN][MAXN]; 8 int vis[MAXN]; 9 int P,N; 10 int find(int x)11 {12 f 阅读全文

posted @ 2012-08-13 23:32 我的ACM之路 阅读(206) 评论(0) 推荐(0) 编辑

HDU 1068 Girls and Boys

摘要: 题目可以很容易的转化为先求二分图的最大匹配,然后拿总人数减去最大匹配值就得到最终结果。题目关键是建立关系图,因为是男和女的关系,但输入数据的时候没有说明那个学号是那那个学号是女,所以你就建立一个总人数*总人数的关系矩阵,求得的最大匹配值除以2就可以了,因为相同的增广链你求了两边。代码如下;View Code 1 #include<iostream> 2 using namespace std; 3 #include<cstdio> 4 #include<cstring> 5 #include<vector> 6 #define MAXN 1010 阅读全文

posted @ 2012-08-13 23:27 我的ACM之路 阅读(575) 评论(0) 推荐(0) 编辑

HDU 2063 过山车

摘要: 简单的最大二分图匹配View Code 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 #include<cstdio> 5 #include<cstring> 6 7 #define MAXN 505 8 9 int match[MAXN];10 int map[MAXN][MAXN];11 int vis[MAXN];12 int K,M,N; 13 14 int find(int x)15 {16 for(int i=1;i<=N;i++)17 { 18 阅读全文

posted @ 2012-08-13 23:21 我的ACM之路 阅读(174) 评论(0) 推荐(0) 编辑

POJ 3041 Asteroids 题解

摘要: 简单的二分图最大匹配View Code 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 #include<cstdio> 5 #include<cstring> 6 7 #define MAXN 510 8 9 int match[MAXN];10 int map[MAXN][MAXN];11 int vis[MAXN];12 int K,M,N; 13 14 int find(int x)15 {16 for(int i=1;i<=N;i++)17 { 18 阅读全文

posted @ 2012-08-13 23:18 我的ACM之路 阅读(211) 评论(0) 推荐(0) 编辑

POJ 1422 Air Raid

摘要: 二分图的最少边匹配,即找出最少的边可以覆盖所有的点。用匈牙利算法找出最大匹配,则最终结果为:ans = 图的顶点数 - 最大匹配。代码如下: 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 #include<cstdio> 5 #include<cstring> 6 7 #define MAXN 125 8 9 int match[MAXN];10 int map[MAXN][MAXN];11 int vis[MAXN];12 int n,m; 13 14 int 阅读全文

posted @ 2012-08-13 23:09 我的ACM之路 阅读(229) 评论(0) 推荐(0) 编辑

HDU 棋盘游戏 题解

摘要: 刚刚读这一题时以为这一题与Fire Net一样,后来才发现题目上面阴影部分不影响车的相互攻击,这就说明一行一列只能最多放置一个车。这一题目求放置最多车数目比较好求,直接就是二分匹配最大点集,关键是求重要点个数,那么我们可以依次去掉关联边,再求增广链,看求得的结果与开始求得的结果是否相同,如果不相同,则说明存在一个关键点。删边的代码:1 for(int i=1;i<=K;i++)2 {3 map[e[i][0]][e[i][1]]=0;4 int xx=getR();5 ... 阅读全文

posted @ 2012-08-13 23:05 我的ACM之路 阅读(992) 评论(1) 推荐(0) 编辑

导航