算法学习
文章平均质量分 64
tyh24689
这个作者很懒,什么都没留下…
展开
-
ACM寒假培训——各种排序
1.冒泡排序基本思想:每次遍历数组,相邻的两个元素比较,(升序时)如果后面小于前面那么就交换这两个数,每次循环结束时使得一个最大数冒泡至数组尾部。最终实现全部排序。时间复杂度:o(n^2) 空间复杂度:o(1)优化:由于冒泡排序在进行排序时,遍历一次的同时可以判断该数组是否有序,因而在排序时可以判断如果当前数组有序,即可以退出排序。void bubble_sort(int a[],原创 2014-01-12 13:29:44 · 751 阅读 · 0 评论 -
HDU5259(百度之星复赛1002)——弹吉他(DP)
题目连接题目分析这是一道比较典型的DP题目,但是题目的状态数量比较多,转移数量也比较多,所以枚举起来会比较麻烦,所以可以用一个技巧就是可以预处理出所有的序列然后用序列枚举状态转移,这样会使代码简洁很多。#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cmath>#incl原创 2015-06-09 16:08:25 · 774 阅读 · 0 评论 -
hiho一下第一周——最长回文子串
题目连接http://hihocoder.com/problemset/problem/1032题目分析类似于KMP的思想,利用已经匹配的信息计算未匹配的信息。 基本原理就是:我们将f[i]定义为以i为中心的最长回文串长度。那么如果有f[5]=7,f[4]=3, 那么我们可以得到f[6] >=3.以此来减少比较次数。当然还有一些细节要处理。比如回文串长度的奇偶性。代码这个是我自己写的版本,不是很精原创 2015-03-07 13:26:07 · 733 阅读 · 0 评论 -
KMP字符串匹配算法学习总结
最近学长讲了KMP算法,又叫看毛片算法,原创 2014-05-04 16:07:24 · 663 阅读 · 0 评论 -
最短路模板——dijkstra,SPFA(邻接表实现)
#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;const int INF = 1e8;const int N = 1000 + 10;struct Edge{ int v,w;原创 2014-08-09 00:04:13 · 609 阅读 · 0 评论 -
Java 大数模板
之前一直听说java自带大数模板,之前些高精度的题目一直都特别麻烦,所以昨天下午就学习了一下java的使用。虽然之前从来没有用过java,但是java的语法规则和C++还是十分相似的,所以理解起来并不困难。而且 Eclipse 这个软件挺好用的,是你一边写一边编译的,而且错误的原因十分详细,所以调试的效率会高不少。虽然java的许多细节与C++不一样,但是在编写几个程序之后就差不多了解原创 2014-03-22 10:52:58 · 1639 阅读 · 1 评论 -
解题报告之——Wireless Network 并查集
题目地址:http://poj.org/problem?id=2236开始的时候并没有看出是并查集,以为是DFS,但是从给的数据规模是就可以判断,用DFS肯定是要超时或者超内存的,其实仔细想一想其实这是一个并查集的问题。每修理好一台电脑,都与所有可能与之连接的电脑建立关系,因而距离的作用仅仅作为判断能否沟通的依据。最后询问两台电脑是否有关系也就是询问他们的祖先是否相同。原创 2014-01-18 16:49:46 · 696 阅读 · 0 评论 -
堆排序
之前写过一个所谓的堆排序,其实并不是真正的堆排序,当时没有理解堆排序的真正原理。其实堆排序首先要建立一个大根堆,保证每个父亲节点都比儿子大。建立大根堆的过程其实类似于插入排序,首先从最后的父亲开始,调整使该节点父亲最大,然后当考察已为大根堆节点的父亲时,即看作该父亲为新插入的元素,将其调整到树内对应的位置即可,一直到所有元素都插入完成,即到树的顶端,此时大根堆建立完成。第二部分是交换,原创 2014-01-19 11:11:06 · 539 阅读 · 0 评论 -
扩展欧几里得算法及其应用
扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y,使得 gcd(a,b)=ax+by。 证明:设 a>b。 1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0; 2,ab!=0 时 设 ax1+by1=gcd(a,b); bx2+(a mo转载 2014-07-14 19:33:21 · 575 阅读 · 0 评论 -
ACM 暑期培训——二分/三分专题
A原创 2014-07-17 19:53:07 · 734 阅读 · 2 评论 -
拓扑排序学习
其实早就对拓扑排序觊觎已久原创 2014-06-01 10:51:11 · 714 阅读 · 0 评论 -
HDU2196——Computer(树形DP,经典)
题目连接题目解析经典的树形DP题。 题意是求树中每个点到所有叶子节点的距离的最大值是多少。 由于对于一个节点来说,可能得到的距离最大的值的路径来自他的子树,或者从他的父节点过来,所以用两次DFS。 第一次DFS求出所有节点在他的子树范围内到叶子节点距离的最大值和第二大的值,第二次DFS更新从父节点过来的情况就可以了。 因为如果只存最大值的话,判断一个点的从父节点过来的最大值,那么如果他的父节原创 2015-06-09 16:03:49 · 573 阅读 · 0 评论