自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

happen_zhang

只要平平安安.

  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 LCP数组的实现和最长公共连续子串

LCP数组(Longest Common Prefix Array, 高度数组):是由后缀数组中相邻两个后缀的最长公共前缀的长度组成的数组。        假设字符串S, 后缀数组sa, LCP数组lcp, 那么有后缀S[sa[i]...]与S[sa[i + 1]...]的最长公共前缀的长度为lcp[i]。        lcp的计算: (后缀数组的实现)假设S[i...]与S[sa[ra

2013-09-29 21:24:21 4800

原创 后缀数组的实现和字符串匹配

字符串后缀:从字符串的某个位置开始到字符串末尾的子串。        后缀数组:指将某个字符串的所有后缀按照字典序排序后得到的数组,但数组并不直接保存后缀字符串,只保存对应的其实位置。         S[]="suffixarray"的后缀数组sa[]isa[i]S[sa[i]...]011'\0'(空串)16array

2013-09-28 20:25:36 2352

原创 对字符序列循环向左(右)移动的技巧

给出一个字符序列S,求对S向左(右)循环移动i后的字符序列。        比如:S = abcdefg, i = 3, 则操作完成后S = defgabc (向右同理哦)        技巧:假如S = abcdefg, i = 3, 那么可以进行如下操作:        1) 对S的前i个字符进行翻转, 对于上例,则可以得到 abc => cba        2) 对S中i以

2013-09-28 18:40:28 1999

原创 最大流 Ford-Fulkerson算法

最大流和割的关系:        定理一:如果f是网络中的一个流,CUT(S,T)是任意一个割,那么f的值等于正向割边的流量与负向割边的流量之差。        证明:        设X和Y是网络中的两个顶点集合,用f(X,Y)表示从X中的一个顶点指向Y的一个顶点的所有弧(弧尾在X中,弧头在Y中:XY)的流量和。        只需证明:f=f(S,T)-f(T,S) 即可。下

2013-09-27 20:20:56 1329

原创 分桶法和平方分割(对区间的操作)

分桶法:把一排物品或者平面分成桶,每个桶饭分别维护自己的内部信息,以达到高效计算的目的的方法。        平方分割:把一排n个元素中每√n个元素分在一个桶内进行维护的方法,使对区间操作的时间复杂度降为O(√n)。        类似线段树哦。        给定一个n个整数的数列a1, a2, a3, ..., an和m个三元组表示的查询。对于每个查询(i, j, k)输出

2013-09-25 22:21:24 2584 1

原创 摘给给自己

“一心逐鹿不顾兔”的人则往往容易成功,必要的时候完全可以破釜沉舟,孤注一掷,有得必有失,有时候冒险还是值得的。        我崇尚那些不断进取的灵魂,我羡慕那些走到成功地位的个体,我理解所有为生命的价值而不懈努力的精灵。通向成功的道路有很多,失败并不可怕,可怕的是没有一点色彩,没有一点张扬的人生。        童年时惟一的精神资源就是由自己漫无边际的幻想所创造出来的自己

2013-09-22 15:54:05 921

原创 二叉搜索树的实现

二叉搜索树的删除:       (1)、没有左孩子,直接把右孩子替代删除结点       (2)、有左孩子但左孩子没有右孩子,则把左孩子替代删除结点       (3)、其它,把左孩子的最大的结点替代删除结点       时间复杂度O(logn)#include #include struct node { node* left; node* right; in

2013-09-18 18:47:13 780

原创 Bellman-Ford最短路径和负圈判断

Ballman-Ford的最短路径算法是以边为单位进行的,而Dijkstra则是以顶点为单位进行的啦。        Ballman-Ford算法需要遍历所有|E|条边,最坏的情况下需要遍历|V - 1|*|E|条边,所以可以借助这个特点来判断图是否有负圈哦。        Ballman-Ford能够解决带有负圈的图。        时间复杂度为O(|E|*|V|)。#inc

2013-09-18 10:10:25 1610

原创 优先队列的实现

STL中有priority_queue可以实现优先队列。        下面的代码是小堆哦,是从小到大的顺序。#include #define MAX_N 2001int heap[MAX_N];int size;void push(int x) { int i = size++; int p; while (i > 0) { p = (i - 1) / 2;

2013-09-18 08:25:06 686

原创 hdu 1035 Robot Motion

hdu 1035 Robot Motion        深搜。#include #include #define MAX_N 11char map[MAX_N][MAX_N];int visited[MAX_N][MAX_N];int n, m;int sx, sy;int step, loopStep;bool dfs(int x, int

2013-09-15 17:14:05 820

原创 反复推进区间开头和末尾, 求解最小区间

给出一个n个整数的序列,求出最小的连续序列长度,使得ai + a(i+1) + ... + a(t)的和不小于S。 (1         比如:        输入 n = 10, S = 15, a = {5, 1, 3, 5, 10, 7, 4, 9, 2, 8}                       输入 n = 5,  S = 11, a = {1, 2, 3, 4, 5}

2013-09-15 16:56:38 858

原创 hdu 2571 命运

hdu 2571 命运        动态规划, dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], dp[i][j / k])#include #define MAX 1005#define INF -0xffffff#define max(a, b) (a > b ? a : b) int dp[21][MAX];int m

2013-09-13 14:42:31 568

原创 hdu 1867 A + B for you again

hdu 1867 A + B for you again        题目没有说明输入一定是前一个字符串的后缀和后一个字符串匹配,所以需要进行两次kmp匹配,然后得出最大的匹配数。#include #include #define MAX 100005char strA[MAX], strB[MAX];int next[MAX];void getNext(char*

2013-09-13 10:36:16 743

原创 hdu 2594 Simpsons’ Hidden Talents

hdu 2594 Simpsons’ Hidden Talents        求第一个字符串StrA的前缀和第二个字符串strB的后缀的最大长度.        只要把strA当做模式串去匹配strB就可以啦, 不过还要注意被匹配串strB的长度哦。       例如 strA = 'abcabcabcabc', strB = 'abcabcabcabcabc' 答案却是 ab

2013-09-12 15:24:24 779

原创 hdu 1711 Number Sequence

hdu 1711 Number Sequence        kmp基础题.#include #define MAX 10005int n, m;int a[MAX*100], b[MAX];int next[MAX];void getNext(int* arr, int* next) { int j, k; j = 0; k = -1;

2013-09-12 14:15:53 657

原创 不断减少时间复杂度的一个例子

问题:给出N张写有数字(k1, k2, ..., kn)的牌 和 一个数字M, 从中抽4次(每抽完一次要放回), 判断是否存在抽取4次牌上数字的和为M的组合是否存在。                   1         输入:n = 3, m = 10, k = {1, 3, 5}        n = 3, m = 9, k = {1, 3 , 5}        输出:yes(

2013-09-11 09:39:33 2160

原创 hdu xxxx Peragrams

PeragramsTime Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 1   Accepted Submission(s) : 1Font: Times New Roman | Verdana | GeorgiaFo

2013-09-09 08:27:41 1267

原创 hdu 2952 Counting Sheep

hdu 2952 Counting Sheep        简单深搜.#include #include #define MAX 105int dir[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};char map[MAX][MAX];bool visited[MAX][MAX];int T;int n, m;void dfs(int x,

2013-09-08 13:54:47 729

原创 hdu 2717 Catch That Cow

hdu 2717 Catch That Cow        广搜.#include #include using namespace std;#define MAX 100005struct node { int pos; int step;};int n, k;bool visited[MAX];int bfs(int s) {

2013-09-08 12:47:58 718

原创 hdu 2095 find your present (2)

hdu 2095 find your present (2)        ^(异或)运算, 0 ^ a = a, a ^ b ^ b = a,  a ^ (偶数个)b = a, 那么 0 ^ a ^ a = 0咯.#include int main() { int n; int k, a; int i; while (scanf("%d", &n) != EO

2013-09-08 11:30:09 682

原创 hdu 1217 Arbitrage

hdu 1217 Arbitrage        题意:判断是否有一种货币通过和其它不同的货币的汇率进行兑换, 最后是否会多出原来的价值.比如: 1美元去兑换, 1*0.5*10.0*0.21 = 1.05.        Flody最短路径.#include #include #include using namespace std;#define MAX 35dou

2013-09-08 09:36:13 712

原创 hdu 2680 Choose the best route

hdu 2680 Choose the best route        反向建图, 然后计算终点到各点的最短路径.#include #include using namespace std;#define MAX 1001#define INF 0xffffffint map[MAX][MAX];bool visited[MAX];int lowco

2013-09-07 19:22:46 733

原创 hdu 1548 A strange lift

hdu 1548 A strange lift        广搜, 最短路径也可以做。#include #include using namespace std;#define MAX 205struct node { int floor, k; int step;};int n, a, b;node floors[MAX];bool

2013-09-07 19:17:49 674

原创 hdu 1385 Minimum Transport Cost

hdu 1385 Minimum Transport Cost        Floyd最短路径和按字典序存放最短路径.#include #define MAX 105#define INF 0xffffffint map[MAX][MAX];int tax[MAX];int path[MAX][MAX];int n;void floyd() {

2013-09-07 15:02:06 1237

原创 hdu 2112 HDU Today

hdu 2112 HDU Today        求最短路径。        题目是双向图哦, 终点起点一样的话要输出0哦。#include #include #include #include using namespace std;#define MAX 200#define INF 0xffffffint g[MAX][MAX];bool

2013-09-07 11:36:34 894

原创 hdu 1257 最小拦截数

hdu 1257 最小拦截数        最小递增子序列.#include #define MAX 30005#define INF 0xffffffint d[MAX];int a[MAX];int binSearch(int* arr, int left, int right, int key) { int mid; while (left < right) {

2013-09-04 00:10:40 618

原创 hdu 1677 Nested Dolls

hdu 1677 Nested Dolls        题意: 如果一个布娃娃a的h和w都大于另一个布娃娃b的h和w, 那么b就能嵌套在a里面, 要求所有娃娃嵌套后的最小个数.        先对娃娃的w按从大到小排序, 如果w相等, 则按h从小到大排序, 求出lis.#include #include using namespace std; #define MAX

2013-09-04 00:06:10 1246

原创 hdu 2444 The Accomodation of Students

hdu 2444 The Accomodation of Students        二分图的判断和最大匹配,        二分图还有一个名字叫"双色图"吧, 顾名思义吧, 图中的任一条边相连的两个顶点颜色是不同的哦.这就可以把图分成两部分啦, 假设一部分是白色, 一部分是黑色, 那么二分图中的任一边都是连着两个不同颜色的顶点了.         题目需要判断n学生的关系是否满足

2013-09-03 23:56:05 787

原创 hdu 2063 过山车

hdu 2063 过山车        二分图最大匹配.#include #include #define MAX 505bool map[MAX][MAX];bool visited[MAX];int match[MAX];int k, n, m;bool dfs(int v) { int i; for (i = 1; i <= m; i++) { if (

2013-09-03 23:47:24 772

原创 hdu 1513 Palindrome

hdu 1513 Palindrome        求出字符串的顺序和逆序的最长公共子序列的长度, 插入数 = 字符串的长度 - 最长公共子序列长度。        这道题给出的是最长可以5000的字符串长度哦,假如使用一般的方法来开个二维数组,那么内存会不够的啦, 那么就用滚动数组吧。        这道题需要的是最长公共子序列的长度, 那么可以放弃一些之前的状态, 因为只需要dp

2013-09-03 00:42:02 678

原创 hdu 1159 Common Subsequence

hdu 1159 Common Subsequence        最长公共子序列的模板题啦。       这里有一个关于lcs问题的分析 最长公共子序列dp解法#include #include #define MAX 1005int dp[MAX][MAX];char a[MAX], b[MAX];inline int max(int a, i

2013-09-03 00:20:37 446

原创 hdu 2546 饭卡

hdu 2546 饭卡        01背包...#include #include #include using namespace std;#define MAX 1005int dp[MAX], c[MAX];int n, v;inline int max(int a, int b) { return a > b ? a : b;}inline void

2013-09-02 00:24:57 565

原创 hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活        01背包的对物品的选择方案只有 0(不拿) 和 1(拿)吧, 完全背包对一件物品i的选择就有 k 种啦, k         多重背包, 拆分物品分成多件, 这里是用2的幂作为拆分因子的.        假如当一件物品i的数量c和价值p的乘积c*p大于背包总量时, 可以认为物品i的数量无限啦, 所以就可

2013-09-02 00:21:32 639

原创 hdu 1248 寒冰王座

hdu 1248 寒冰王座        简单完全背包...#include #include #define MAX 10005int dp[MAX];int p[4] = {0, 150, 200, 350};inline int max(int a, int b) { return a > b ? a : b;}int main() { int T, mon

2013-09-02 00:08:50 834

原创 hdu 1203 I NEED A OFFER!

hdu 1203 I NEED A OFFER!        01背包.        题目中要求求出至少拿到一个offer的概率, 这样不好求, 那就求它的对立面, 即 拿不到任何一个offer的最小概率, 这样就可以转为01背包了.#include #define MAX 10005double dp[MAX], p[MAX];int w[MAX];inline d

2013-09-02 00:03:05 559

jsp商城(sql server2005)

jsp商城(sql server2005)

2014-04-14

空空如也

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

TA关注的人

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