自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (2)
  • 收藏
  • 关注

原创 POJ 3041 Asteroids (匈牙利算法)

题目大意给出n*n的矩形,k个点。每次可选择删除一行或一列的点,求至少需要删除几次方可将点全部删除。分析构造有向二分图:把每行x或者每列y看成一个点,而障碍物(x,y)可以看做连接x和y的边。问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,其实这就是最小点覆盖问题。Konig定理: 最小点覆盖数 = 最大匹配数用匈牙利算法求二分图的最大匹配即可代码#include

2015-10-28 20:48:18 340

转载 匈牙利算法详解

转自:http://blog.csdn.net/dark_scope/article/details/8880547【书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程】匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径

2015-10-28 20:23:24 399

原创 POJ 1094 Sorting It All Out (拓扑排序)

题目大意给出一个数n,表示有n的大写字母,从A开始。然后给出m个字符串,均是X < Y的格式,其中X,Y均是单个的大写字母。问根据这m个字符串得到前n个字母的关系:全序,有环,偏序按以下三种格式输出:Sorted sequence determined after **i** relations: **XXXX**.Inconsistency found after **i** relati

2015-10-26 22:38:39 319

原创 POJ 3026 Borg Maze (Prim)

题目大意给出m行n列的矩阵,所有元素均为’#’,’ ‘, ‘A’ ,’S’。其中#代表墙,即不可通过,’ ’ 则代表路。要求从S出发到达所有A的道路长度。分析所有字母都作为结点,字母之间的距离作为边,构造图。首先用BFS找出每个节点到其他点的距离,从而得到边然后直接prim求解代码/* 所有字母都作为结点,字母之间的距离作为边,构造图 * 首先用BFS找出每个节点到其他点的距离,从而构

2015-10-25 22:38:56 337

原创 POJ 1789 Truck History (Prim)

题目大意给出n个长度为7的串,串之间的dis为两个串中不同字母的个数,任何一个串都是可以由其它串得到,代价是两个串的dis求将所有串转换成同一个串的最少代价分析以串作为结点,串之间的代价作为边,建图。然后就是直接求最小生成树代码#include <iostream>#include <string>#include <cstring>using namespace std;#def

2015-10-25 20:12:31 283

原创 POJ 2240 Arbitrage (Floyd)

题目大意给出n种货币,以及m种对换方式的兑换率。求通过兑换能否使钱增加。分析dis[i][j]表示货币i兑换货币j的最大兑换率。求出所有货币的之间的最大兑换率。最后查看dis[i][j] * dis[j][i] 是否大于1即可。初始化dis[i][j] = (i == j ? 1 : 0);直接使用Floyd算法即可代码#include <iostream>#include <stri

2015-10-25 16:43:05 307

原创 POJ 1125 Stockbroker Grapevine (Floyd)

题目大意给出n个经纪人,接下来的n行,每行的第一个数m代表该经纪人的朋友数。紧接着有m对数,第一数代表朋友编号,第二个表示将消息传给该朋友所需时间。求从某个人开始,将消息传送到所有人所需花费的最少时间。分析很明显,要求出任意两点的最短路径,用Floyd算法。然后遍历结果数组dis,求出每一行的最大值的最小值即可。代码#include <iostream>using namespace s

2015-10-25 15:58:49 373

原创 POJ 2253 Frogger(floyd 或 dijstra)

题目大意出个n个点的坐标,任意两个点都是互相可到达的。求第0点到第1点的所有路径中,长度最大的边的最小值。Floyd算法求解Floyd是求图中任意两个点的最短路,即dis[i][j]表示i到达j的最短距离。这里稍作变换,令dis[i][j]表示i到达j的所有路径中长度最大的边的最小值。则if(dis[i][j] > max(dis[i][k] , dis[j][k])) dis

2015-10-25 14:31:24 332

原创 POJ 1062 昂贵的聘礼 (dijkstra)

题目大意有n个物品,编号为1…n,每个物品都有三个属性P、L、X(X < N),分别表示物品的价格,等级,替代品数量(即使用其它物品来替代该物品后,只需付出那个物品的价格和替代后的优惠价格即可得到该物品)。给定m,表示物品之间相差等级不能超过m。假设3个物品,m=1,等级依次为1,2,3。可以用2替代1,却不能使用3替代2,因为1,3之间等级超过m。求得到物品1的至少需要付出的金币数量分析

2015-10-24 21:06:42 377

原创 POJ 3259 Wormholes (Bellman-ford)

题目大意给出n个点,m条边以及w个虫洞。每条边都是双向的,并且有一个权值v表示通过这条边需要花费秒。每个虫洞是单向的且有一个权值v表示通过这个虫洞可以回到v秒之前。求最终到达起点时,所花费时间相对于起始时间是否为负分析判断是否存在负环即可#include <iostream>#include <vector>using namespace std;#define INF 0x3ffff

2015-10-24 17:21:39 317

原创 POJ 1860 Currency Exchange(Bellman-Ford)

题目大意给出n个顶点,m条边,原点s及初始金钱v。每条边有6个参数from, to, c1, r1, c2, r2。假设在from出有v的金钱,从from -> to,金钱 = (v - c1) * r1; 假设在to出有v的金钱,从to -> from,金钱 = (v - c2) * r2;求从s出发,最终回到s时金钱能否增长分析把每条双向边改写成两条单向边。只需用Bellman-F

2015-10-24 16:03:52 319

转载 Bellman-Ford算法详讲

概要Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。所以就需要使用其他的算法来求解最短路径,Bellman-Ford算法就是其中最常用的一个,时间复杂度O(VE)。spfa是在Bellman-Ford上的队列优化,时间复杂度O(kE) (k << V),但在最坏的情况下,有可能退化

2015-10-24 15:54:51 481

原创 HDU 2825 Wireless Password (AC自动机+DP+状态压缩)

题目大意有m个单词,每个单词的长度不超过10。求长度为n的串包含至少k个单词的串的数量,所有字符均有小写字母组成。(0<=m<=10,1<=n<=25)分析将所有单词构造成AC自动机用状态压缩表示单词,val[i]表示结点i包含的单词;状态dp[i][j][k]表示长度为i的串,到达状态j,包含k的word时的数量状态转移方程dp[i+1][v][k|val[v]] += dp[i][j

2015-10-15 21:19:47 486

原创 POJ 1625 Censored! (AC自动机+DP+大数加法)

题目大意给出包含N个字符的字典,组成长度为M的句子,求无禁止单词的句子有多少个。禁止单词有P个,单词长度不超过10,所以字符的ASCII码均大于32(1 <= N <= 50, 1 <= M <= 50, 0 <= P <= 10)。分析状态dp[i][j]表示第i步时,到达状态j的字符串数,途中不能经过危险结点则状态转移方程为dp[i][j] = sum(dp[i-1][k]),其中j是k

2015-10-14 22:53:43 380

原创 POJ 1054 The Troublesome Frog

题目大意给你一块m*n的矩阵,以及num个点的坐标,含有点的数量最多的直线所含有的点的数量。要求:直线上的点间距要相等,不足3个点的记为0。若前k个点在矩阵内,第k+1个点的坐标也在矩阵内,但矩阵中不存在该点,则此直线无效。分析先对坐标按x排序,若x相等,则按y排序枚举每条直线上的**前两个点**s1 ,s2即可。计算出步长lenx = s2.x - s1.x , leny = s2.y

2015-10-10 20:48:24 487

原创 POJ 1191 棋盘分割 (DP)

题目大意输入一个8*8的矩阵,将其分解成n个矩阵,使各矩阵总分的均方差最小。均方差,其中平均值,xi为第i块矩形棋盘的总分。 分析将方差公式化简成s^2 = (x1^2+…+xn^2) / n - x^2,x为平均值dp[i][x1][y1][x2][y2]表示对于(x1,y1)(x2,y2)的矩阵,第i次分割后得到的平方和的最小值sum[x1][y1][x2][y2]表示矩形(x1,y

2015-10-09 18:31:37 316

原创 ZOJ 2319 Beautiful People (LIS的变形)

题目大意有n个人的,每个人有一个si和bi,对于i和j来说,只有当si < sj && bi < bj ,或者 si > sj && bi > bj 时,二人才不会互相讨厌。也就是说,只有两个人其中一方的s和b都小于另一方时,二人才不会互相讨厌。求最多有多少人不会互相讨厌分析给n个人按s排序从小到大,若s相等则按b从大到小排序。然后求b的最长上升子序列的长度ans即可用O(nlogn)

2015-10-08 20:06:59 420

原创 POJ 1159 Palindrome (LCS)

题目大意给出一个字符串s,求至少添加几个字符使之成为一个回文串分析求出s与s的逆序s’的最长公共子序列的长度d,然后len - d即可dp[i][j]表示s串种1…i和n…n-j的最长公共子序列的长度状态转移方程若s[i] = s[j],则dp[i][j] = dp[i-1][j-1] + 1 否则,dp[i][j] = max(dp[i][j-1] , dp[i-1][j])由于s长度

2015-10-08 18:51:07 329

原创 POJ 1080 Human Gene Functions (类似LCS)

题目大意题目给出一张5*5的映射表,分别是ACGT-,每对字符都有一个相似值。给出两个字符串,由ACGT组成,求两个字符串匹配的最大相似值和,可以用-代替字符匹配。分析类似求最长公共子序列dp[i][j]表示s1中1….i和s2中的1….j匹配的最大相似值状态转移方程dp[i][j] = max{dp[i-1][j-1]+mp[a][b] , dp[i-1][j]+mp[a][4] ,

2015-10-08 16:21:19 257

原创 POJ 1163 The Triangle (数塔)

题目大意一个n层的数塔,从第一层走到最后一层,沿途经过的数的最大值分析dp[i][j]表示到达(i , j)时的最大值状态转方程dp[i][j] = max(dp[i-1][j-1] , dp[i-1][j]) + a[i][j];代码#include <iostream>#include <cstring>using namespace std;const int maxn = 360

2015-10-08 14:05:09 284

原创 POJ 2533 Longest Ordered Subsequence (LIS)

求最长上升子序列的长度O(n^2)的算法dp[i]表示以i结尾最长上升子序列的长度状态转移方程:dp[i] = max(d[j])+1,j代码//时间复杂度O(n^2)的算法#include <iostream>using namespace std;const int maxn = 1010;int dp[maxn]; //dp[i]表示以i结尾最长上升子序列的长度int a[maxn

2015-10-08 13:02:01 281

原创 POJ 1260 Pearls (简单DP)

题目大意给出n类珠子,以及每类珠子的数量num[i]和单价val[i]。单价从小到大排序,买每一类珠子的价格是(num[i]+10)*val[i]。问买sum(num[i])的珠子,所需最少花费。其中,价格较低的珠子可有价格高的珠子替代,反之不行。分析很容易看出,珠子是不能跳跃替代的。比如说,若用第3类珠子替代第1类珠子时,则第2类珠子也要由第3类珠子替代。否则,用第2类珠子替代第1类珠子更

2015-10-08 12:10:49 446

原创 POJ 1836 Alignment (简单DP)

题目大意给出n个浮点数(2 <= n <= 1000 , 0.5 <= 浮点数 <=2.5),然后求一段序列长度ans,要求这个序列中从左到右递增,或者从右到左递增。输出n - ans分析求最长上升子序列和最长下降子序列的长度dp1[i]表示以i结尾的最长上升子序列的长度dp2[i]表示以i结尾的最长下降子序列的长度然后枚举两段区间[0,i] [j,n-1]时间复杂度O(n^2)代

2015-10-07 16:34:01 279

原创 POJ 3267 The Cow Lexicon (简单DP)

题目大意输入一个长度为m的文本串,n个模板。求在文本串中至少去掉几个字母可以完全匹配模板。(2<= m1<= 300, ≤ n ≤ 600,模板串长度 ≤ 25),全部由小写字母组成。分析dp[i]表示以i结尾的子串至少需要去掉字符数状态转移方程: dp[i] = min(dp[i] , tmp+dp[j]),其中tmp为匹配模板需要去掉的字符数,j是匹配完后的位置。初始化dp[i] = d

2015-10-05 16:57:25 327

原创 POJ 1837 Balance (简单DP)

题目大意一架天平,天平上有m个钩子,有n个砝码(2 <= c <= 20,2 <= G <= 20),天平的坐标范围为[-15,15]。给出m个钩子的坐标c[i](-15<=c<=15),以及n个砝码的重量g[j](1 <= g <= 25),要求所有砝码都要用到,求最终平衡的方案数分析dp[i][j] 表示对于前i个砝码,在平衡度为j时的方案数最大平衡度maxn = 15 * 20 *

2015-10-05 14:06:50 479

原创 POJ 1276 Cash Machine (多重背包)

题目大意给定cash,N,表示有cash现金,N种账单。每种账单的额度为D[i],数目为n[i],求在不超过cash的前提下,最多能兑换到到少money。分析对于每种额度的账单,可选择k张(0 , 1 , … , n[i]),很明显的多重背包问题。状态:dp[j]表示在剩余j的现金下,前i种账单最多能兑换到的money状态转移方程: dp[j] = max(dp[j] , dp[j-D[i

2015-10-03 15:48:18 273

求点到线段的距离

求点到线段的距离

2014-03-20

C++计算机和常用到的一些函数

ACM计算几何:求叉积,点积,两点间的距离,点是否在线段上,点到线段的距离,判断两条线段是否相交,线段与直线的位置关系等等

2014-03-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除