Algorithm
文章平均质量分 77
烟蓑雨笠
这个作者很懒,什么都没留下…
展开
-
八皇后及N皇后的回溯与递归算法
八皇后及N皇后的回溯与递归算法// 8 queens#include int position[9]; // 第i个皇后的列号是position[i] (i:1-8)int check(int step){ int i; if(position[step]>8) return 0; for(i=1; i<step; i++){ if (原创 2014-01-30 10:50:17 · 1850 阅读 · 0 评论 -
再谈排列问题
再谈排列问题描述小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。输入第一行输入整数N(1每组测试数据第一行两个整数 n m (1输出在1-n中选取m个字符进行全排列,按字典序全部原创 2014-03-14 18:43:41 · 882 阅读 · 0 评论 -
全排列算法之Perm递归算法实现
全排列算法之Perm算法实现题目描述:给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。我们假设对于小写字母有'a' 输入:输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出:输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:已知S =原创 2014-03-13 20:23:57 · 6509 阅读 · 1 评论 -
简单并查集
简单并查集题目描述:假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5 , m = 3 , r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一原创 2014-03-19 19:51:50 · 886 阅读 · 0 评论 -
求首尾相连数组的最大子序列和
求首尾相连数组的最大子序列题目描述:给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数原创 2014-03-19 20:49:00 · 1796 阅读 · 0 评论 -
最长上升子序列nlogn算法
最长上升子序列nlogn算法题目描述:给定一个整型数组, 求这个数组的最长严格递增子序列的长度。 譬如序列1 2 2 4 3 的最长严格递增子序列为1,2,4或1,2,3.他们的长度为3。输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为一个整数n(1输入的第二行包括n个整数,代表这个数组中的数字。整数均在int范围内。原创 2014-01-30 11:20:13 · 2418 阅读 · 2 评论 -
KMP字符串模式匹配详解
KMP字符串模式匹配详解来自CSDN A_B_C_ABC 网友KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一. 简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int po转载 2014-04-09 20:29:30 · 555 阅读 · 0 评论 -
最大连续子序列和的O(n)算法
最大连续子序列和的O(n)算法题目描述:Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, Ni+1, ..., Nj } where 1 Maximum Subsequence is the continuous subseq原创 2014-02-10 13:10:08 · 2417 阅读 · 0 评论 -
BFS与DFS的简单应用(三)
BFS与DFS的简单应用(三)题目描述:详见链接http://acm.nyist.net/JudgeOnline/problem.php?pid=92如果你仔细看了代码,会发现我在其中使用了一个小小的技巧,因为黑色的边界可能就是图形的边界,因此找到开始BFS的位置显得有点复杂了,我们要考虑很多情况,为了避免这个问题,我采用了一种加边的方法,就是在输入的矩阵块外加入一圈1,再在1原创 2014-02-09 14:01:46 · 1236 阅读 · 0 评论 -
树状数组
树状数组树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值。基本概念:假设数组a[1..n],那么查询a[1]+...+a[n]的时间是原创 2014-04-25 23:20:32 · 926 阅读 · 0 评论 -
2014百度之星资格赛——XOR SUM
2014百度之星资格赛——XOR SUMProblem DescriptionZeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。P原创 2014-05-22 23:18:59 · 852 阅读 · 0 评论 -
2014百度之星资格赛——Energy Conversion
2014百度之星资格赛——Energy Conver原创 2014-05-22 23:29:36 · 656 阅读 · 0 评论 -
字典树Trie
字典树TrieTrie,又称字典树,前缀树(prefix tree),是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。查找、插入复杂度为O(n),n为字符串长度。 它有3个基本性质:1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。原创 2014-05-22 20:43:33 · 952 阅读 · 0 评论 -
卡特兰数
卡特兰数栈是一种常见的数据结构,有许多关于栈的问题,其中之一就是统计元素可能的出栈序列。具体说,就是给定n个元素,依次通过一个栈,求可能的出栈序列的个数。如果我们用直接模拟的方法,当n较大时会很费时间;例如动态规划。令f[i,j]表示栈内有i个元素且栈外有j个元素还未进栈,那么以进栈还是出栈为决策就马上得到了转移方程f[i,j]=f[i-1,j]+f[i+1,j-1]。如此一来,很原创 2014-06-08 22:44:48 · 2465 阅读 · 0 评论 -
2014百度之星初赛(第二场)——JZP Set
2014百度之星初赛(第二场)——JZP SetProblem Description一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S。例如,n=3,S={1,3}不是JZP集,因为(1+3)/2=2不属于S。但是{1,2,3}的其他子集都属于S,所以n=3时有7个JZP集给定n,求原创 2014-05-27 21:45:24 · 904 阅读 · 0 评论 -
2014百度之星初赛(第二场)——Scenic Popularity
2014百度之星初赛(第二场)原创 2014-05-27 20:09:45 · 653 阅读 · 0 评论 -
全排列算法之非递归实现
全排列算法之非递归实现算法的核心思想是如何求下一个排列?例如求23543的下一个排列我们从后往前找相邻的2个递减数字即3,5,那么3就是我们要替换的数字,再从后面找一个比3大的最小数即4,把它们交换,就变成了24533,再对4后面的数进行反转,得到24335,完成了下一个排列的生成。下面是参照STL中next_permutation函数的实现,编制的全排列算法。。。代码:#原创 2014-03-14 18:39:57 · 2319 阅读 · 0 评论 -
数组中第K小的数字
数组中第K小的数字题目描述:给定两个整型数组A和B。我们将A和B中的元素两两相加可以得到数组C。譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]。现在给你数组A和B,求由A和B两两相加得到的数组C中,第K小的数字。输入:输入可能包含多个测试案例。对于每个测试案例,输入的第一行为三个整数m,n原创 2014-02-12 13:41:34 · 1596 阅读 · 0 评论 -
素数的几种求法
素数常见求法1.普通求素数法int IsPrimer(int x) { int i; if(x<2||x%2==0)//如果不加上x%2==0则i不能从3开始 return 0; if(x==2) return 1; for(i=3;i*i<n;i+=2) if(n%i==0) return 0; return 1; }原创 2014-01-26 14:59:11 · 920 阅读 · 0 评论 -
RMQ问题的三种解法
RMQ问题的三种解法首先说一下什么是RMQ问题:RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j主要方法及复杂度(处理复杂度和查询复杂度)如下: 1.朴素(即搜索) O(n)-O(n) 2.线段树(segment tree) O(n)-O(logn) 3.ST(实质是动态规划) O(n原创 2014-02-05 14:58:08 · 4225 阅读 · 3 评论 -
SPFA算法求最短路径
SPFA算法求最短路径题目描述:给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入:输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结原创 2014-02-21 16:08:47 · 1440 阅读 · 0 评论 -
不排序求中位数
不排序求中位数/*一组数的中位数,就是把一组数从小到大排好后位居中间的那一个;如果有奇数个数,那么中位数就是中间的那个;如果有偶数个数,那么中位数就是中间两个数的平均数。那么有没有办法不用排序就可以求出中位数的方法呢?可以回想一下qsort中partition的作用:找出一个分界点,左边的数都小于分界点值,右边的数都大于分界点值。所以,只要不断地进行partition,直到分界点原创 2014-02-22 10:10:38 · 10144 阅读 · 2 评论 -
BFS与DFS的简单应用(一)
BFS与DFS的简单应用(一)题目描述: In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were confronted with the following puzzle. They were given a 3-gallon jug and a 5-gallon jug and were as原创 2014-02-08 18:13:29 · 1161 阅读 · 0 评论 -
最大连续子序列积
最大连续子序列积题目描述:给定一个浮点数序列(可能有正数、0和负数),求出一个最大的连续子序列乘积。输入:输入可能包含多个测试样例。每个测试样例的第一行仅包含正整数 n(n第二行输入n个浮点数用空格分隔。输入数据保证所有数字乘积在双精度浮点数表示的范围内。输出:对应每个测试案例,输出序列中最大的连续子序列乘积,原创 2014-02-10 14:22:34 · 1867 阅读 · 0 评论 -
表达式求值
表达式求值描述ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)输入第一行输入一个整数n,共有n组测试数据(n每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运原创 2014-02-09 12:47:18 · 1463 阅读 · 0 评论 -
贪心算法之区间覆盖问题
贪心算法之区间覆盖问题数轴上有n个区间[ai,bi],选择尽量少的区间覆盖一条指定线段[s,t]。贪心策略:把各区间按照a从小到大排序,从前向后遍历,然后每次选择从当前起点S开始的最长区间,并以这个区间的右端点为新的起点,继续选择,直到找不到区间覆盖当前起点S或者S已经到达线段末端。需要注意的是,如果某一区间边界大于s,t的边界,应把它们变成s或t。因为超出的部原创 2014-02-23 15:19:05 · 5347 阅读 · 0 评论 -
贪心算法之最大不相交区间数问题
贪心算法之最大不相交区间数问题数轴上有n个区间[ai,bi],要求选择尽量多个区间,使得这些区间两两没有公共点。贪心策略:按照b1证明:我们对a1,a2……的关系分以下几种情况考虑:1、a1>a2。 此时区间2包含区间1。这种情况下显然不会选择区间2,因为选择区间1会留下更多的剩余空间。 不仅原创 2014-02-23 15:25:29 · 4229 阅读 · 0 评论 -
贪心算法之区间取点问题
贪心算法之区间取点问题题目描述:Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installa原创 2014-02-23 16:57:33 · 2048 阅读 · 0 评论 -
A*算法文档
A*算法文档如此好贴,不能不转!原文地址:http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht本文版权归原作者、译者所有,我只是转贴;如果侵害到您的权益,请联系我,我将删除本文。基本上,这文章可以说是最佳A*算法文档。极力推荐!Amit's A star Page中译文 译序这篇文章转载 2014-02-23 17:12:30 · 1575 阅读 · 0 评论 -
畅通工程(并查集解法)
畅通工程(并查集解法)题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?输入: 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N原创 2014-02-13 14:28:23 · 1256 阅读 · 0 评论 -
记忆化搜索算法之动态规划
记忆化搜索算法之动态规划题目描述:给从左至右排好队的小朋友们分糖果,要求:1.每个小朋友都有一个得分,任意两个相邻的小朋友,得分较高的所得的糖果必须大于得分较低的,相等则不作要求。2.每个小朋友至少获得一个糖果。求,至少需要的糖果数。输入:输入包含多组测试数据,每组测试数据由一个整数n(1输出:对于每组测试原创 2014-03-05 21:29:47 · 1866 阅读 · 0 评论 -
全排列算法之STL实现
全排列算法之STL实现题目描述:给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。我们假设对于小写字母有'a' 输入:输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出:输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:已知S = s1s原创 2014-03-12 23:36:54 · 1387 阅读 · 0 评论 -
玛雅人的密码
玛雅人的密码原创 2014-08-16 10:10:45 · 972 阅读 · 0 评论