2013年7月16日

POJ 1002 487-3279(排序or不排序)

摘要: 一.排序1.快排,顺序统计2.堆排序优化二.不排序3,开10000000的数组,直接哈希映射,不用排序4.使用trie树,不用排序,深搜遍历输出 阅读全文

posted @ 2013-07-16 14:07 Gddxz 阅读(72) 评论(0) 推荐(0) 编辑

树状数组

摘要: 树状数组树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了对树状数组有个形 象的认识,我们先看下面这张图。 如图所示,红色矩形表示的数组C[]就是树状数组.. 阅读全文

posted @ 2013-07-16 13:50 Gddxz 阅读(183) 评论(0) 推荐(0) 编辑

堆排序

摘要: 堆排序 堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]#includeusing namespace std;void HeapAdjust(int *a,int i,int size) //调整堆 { int .. 阅读全文

posted @ 2013-07-16 11:46 Gddxz 阅读(121) 评论(0) 推荐(0) 编辑

归并排序

摘要: (1)分析: 算法时间复杂度:平均:O(nlogn) 最坏:O(nlogn) (2)实现: //将有二个有序数列a[first...mid]和a[mid...last]合并。void mergearray(int a[], int first, int mid, int last, int temp[]){ int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { if (a[i] <= a[j]) temp[k++] = a[i++]; e 阅读全文

posted @ 2013-07-16 11:37 Gddxz 阅读(137) 评论(0) 推荐(0) 编辑

2013年7月5日

线段树入门

摘要: Mythology2008-01-17 13:59 线段树入门好久没写过算法了,添一个吧,写一个线段树的入门知识,比较大众化。上次在湖大,其中的一道题数据很强,我试了好多种优化都TLE,相信只能用线段树才能过。回来之后暗暗又学了一次线段树,想想好像是第三次学了,像网络流一样每学一次都有新的体会。把问题简化一下:在自然数,且所有的数不大于30000的范围内讨论一个问题:现在已知n条线段,把端点依次输入告诉你,然后有m个询问,每个询问输入一个点,要求这个点在多少条线段上出现过;最基本的解法当然就是读一个点,就把所有线段比一下,看看在不在线段中;每次询问都要把n条线段查一次,那么m次询问,就要运算m 阅读全文

posted @ 2013-07-05 16:29 Gddxz 阅读(131) 评论(0) 推荐(0) 编辑

POJ1007 DNA Sorting (求逆序数)

摘要: 【题目】:DNASorting【来源】:点击打开链接【解法】:(1)我的做法(朴素做法效率低O(n2)):这题我做的比较直接,对每个字符串两层循环挨个扫描计算出其总的unsortness的总值,然后快排后顺序输出 #include #include #include #include using namespace std;typedef struct Sn{ char s[101]; int num; }SN;SN data[51];bool cmp(SN a,SN b){ return a.num #include #include #include using namespace ... 阅读全文

posted @ 2013-07-05 12:19 Gddxz 阅读(197) 评论(0) 推荐(0) 编辑

2013年7月3日

Human Gene Functions(最长公共子序列变形题)

摘要: 【题目】:问题B:HumanGeneFunctions【来源】:点击打开链接【解法】:这个题是最长公共子序列的变形题。1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和j对应下最大的权值2.状态方程:写状态方程根据状态转移的情况不同,可分为从当前状态推下一个状态,还有一种是从后面个状态推前面的状态,具体分情况而定(这个地方还不是理解的很透,具体的刘汝佳的黑书上有,以后看了再补充进来)这题是由后面的一个状态反推出前一个所有可能状态,转移方程:DP[i][j]=max{DP[s1[i-1]][s2[j]]+match[s1[i]][‘-’],DP[s1[i]][s2[j-1]]+m 阅读全文

posted @ 2013-07-03 21:54 Gddxz 阅读(144) 评论(0) 推荐(0) 编辑

7.3.(小学期第三套题)解题回顾与心得体会

摘要: 今天题目链接:点击打开链接1.刚开始昨天已经总结过要沉下心来,但今天还是险些栽在另一点上,那就是不要时时刻刻和拿别人比:因为那样打乱了自己的节奏,把自己的注意力转移在别人身上,不能集中精力去做自己能做出来的题。 另外,我想说,我不是你,也不是他,只有我对于我自己是最真实的,我的进步来源于对自我的超越,我永远只有和自己比才叫进步,排名什么的只会扼杀人的淡定的心灵。2.我的心态随着AC数目的增多后的变化历程是:初看B题,觉得好动态,好复杂,好高深,等AC完其他的题后回来再一看数据样例,就项这题一定可以做,结果一定是可以唯一确定的,结果一做发现是本次最水的水题。以前我一直不怎么相信自信的力量,只相信 阅读全文

posted @ 2013-07-03 20:31 Gddxz 阅读(161) 评论(0) 推荐(0) 编辑

状态压缩入门 摆放车子

摘要: 声明:此为转载,原文链接:BUCT OJ网友chdh14b 另外此博客有详细完整代码:http://blog.csdn.net/math_coder/article/details/9671581大家好~我和大家分享一下我对状态压缩类的动态规划题的一些看法。顾名思义,状态压缩类的动态规划的本质是动态规划,所以要处理好状态压缩问题首先要把握好动态规划的解题思路。首先,来回顾一下动态规划算法的设计:(1)首先把握问题的解是否可以分解的,可分解则考虑是否可用动态规划算法。(2)描述最优解的结构。(3)递归定义最优解的值。(4)自底向上的方式计算最优解的值。(5)有计算出的结果构造出一个最优解。然后, 阅读全文

posted @ 2013-07-03 11:02 Gddxz 阅读(271) 评论(0) 推荐(0) 编辑

优先队列用法

摘要: 声明此为转载,原文链接:ski C++之梦在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的qi;通过,greater>qi2;其中第二个参数为容器类型。第二个参数为比较函数。故示例2中输出结果为:2 3 5 6 9第三种方法:自定义优先级。structnode{friendbooloperator(noden1,noden2){returnn1.priority>n2.priority;}intpriority;intvalue;};则会编译不过(G++编译器)因为标准库默认使用元素类型的操作符并无直接联系,故会编译不过。//代码清单#include#include# 阅读全文

posted @ 2013-07-03 10:56 Gddxz 阅读(115) 评论(0) 推荐(0) 编辑

导航