算法与数据结构题目解析
文章平均质量分 55
pandening
我很笨,但我很勤劳!
展开
-
poj 2431
题意:这道题要求的是最少的加油次数,告诉你n个加油站的距离和每个加油站可以加的油。让你求能不能到达终点,如果可以的话最少需要加多少油。 解法:这可以用优先队列来解决。我们想象,当经过一个加油站时,我们不一定加油,但是我们一定可以加油。因为我们到达了这个加油站,所以相应的获得了可以加油的权利,但是我们可以不加,当我们足以行驶到下一个加油站时,我们就可以选择不加,但是当我们无法行驶到下原创 2016-05-24 16:02:48 · 451 阅读 · 0 评论 -
POJ 1251
这道题就是对优先队列的应用。 huffman+priority_queue #include #include #include #include #include #include #include #include using namespace std;int main(){ string in; int count[200]; //原创 2016-05-24 16:41:53 · 397 阅读 · 0 评论 -
poj 1611
题意:输入n,m分别表示学生人数和组数,然后输入m组数据,现在已经知道如果一个小组里面的一个人得病,那么该小组都有可能得病。而且已经知道0号学生已经得病,问:一共有多少人可能得病? 解法:并查集 用树高代表集合的大小,最后输出根为0的小组的人数就可以了!#include #include#define max_n 30005int father[m原创 2016-05-26 14:33:35 · 516 阅读 · 0 评论 -
poj 2542
题意:给定多组(x,y),x和y的信仰相同,估计信仰的数量 解法:并查集,初始化ans为总人数,当添加一对(x,y)后,判断,如果已经是一组了,不做,如果不是,ans-1.#include #include #include /* *This file is about union set operations. *and the program原创 2016-05-26 14:49:30 · 631 阅读 · 0 评论 -
poj 1017
/*题意:给出一些忽略高度的只看面积的东西,大小从1*1....6*6给出这些大小的数量,现在只有6*6的箱子来装这些东西但是为了赚钱,需要尽可能少的箱子,那么最少的箱子数是多少个呢思路:一路贪心下去,先装大的,然后再用小的填空白*/#includeusing namespace std;int box[6];int main(){ //这个数组用来保存当一个箱子里面装入了原创 2016-05-18 22:07:30 · 337 阅读 · 0 评论 -
KMP算法实现才 c++
kmp算法可以有效提高字符串匹配的速度,当匹配字符串中出现较多循环节时尤其有效,但是当一个字符串中几乎每一个字符都不相同的时候,kmp算法并不能很好的加速整个匹配过程,但是光思想就可以甩brute-force算法几条街。下面给出了两种算法的具体实现,对于kmp算法,其关键思想是:当与源字符串出现不匹配时,无需从头再来,而是可以只退回到next[j]的位置,j为当前匹配字符串的位置,所以kmp算法的原创 2016-05-22 15:49:34 · 979 阅读 · 0 评论 -
poj 2752
题意为:给一个字符串,找出又是前缀又是后缀的子字符串的长度,从小到大输出。解法:利用kmp中的next数组来求解这个问题就很简单了。首先,我们应该理解kmp算法中的next数组含义:当失去匹配之后,只需要回退一些,不需要从0开始。也就是对于一个下标j,next[j]的值代表回退过去的位置,next[j]之前的字符串已经匹配成功过。所以不需要再次匹配那对于这道题来说,原创 2016-05-22 17:15:01 · 362 阅读 · 0 评论 -
poj 2406
题意:找一个字符串中的循环字符串次数比如:ababab循环字符串为ab,次数为3又比如:abcab的循环节为abcab,次数为1解法:用kmp数组,kmp数组的含有是当不匹配时可以直接回退到next[j],我们求完next数组之后。用 length%(length-next(length))判断是否具有循环节(自身其实也是一个循环节),如果可以整除,则说明该字符串是由l原创 2016-05-22 17:39:14 · 351 阅读 · 0 评论