悲催!!

字典树

        字典树,数据结构相关的算法之一。刚开始还是比较难搞的,前前后后差不多有三个星期都在学这个,前两个星期都在看链表,学长说链表是数据结构的基础,不会链表后面的什么也学不会。刚开始看的时候,由于指针是个门槛,问了好多学长又问了老师,才算弄明白,也能看懂一些了。然后就是字典树的学习,从功能上讲字典树与map有一定的相似性,是对于很多要处理的数据的话,map就不行了,只能用到字典树。

       字典树的题算是个模板题吧!主要用到三个函数,就可以实现。

       第一个函数是用来新建节点的。

               记得在主函数外定义根节点,在主函数内给根节点申请内存。

       第二个函数是用来插入字符串的。

               这个可以深入一点的理解字符串的插入和指针域大小的确定。 

       第三个函数式用来查找的,依据题意来确定查找的功能。

树状数组

        树状数组,数据结构相关算法之一。具体是个什么东西以全然忘记,只知道和线段树很像,还记得NYOJ的士兵杀敌(1245),貌似3是线段树。

        树状数组的时间复杂度为log(n),有插点问线,插线问点的基本操作,并且用树状数组解决的问题,基本上都能用线段树解决,而线段树能解决的树状数组不一定能解决。相比较而言,树状数组效率要高很多。

        树状数组涉及到位运算: return t & -t; 假设数状数组C中某个节点的编号为x,那么这个节点管辖的区间内的元素个数就为2^k(其中的k为x的二进制的末尾0的个数),又因为这个区间的最后一个元素必然为Ax,所以:Cn=A(n- 2^k + 1)+···An,而计算这个2^k就用到了: return t & -t; 位运算是个很高端很上档次的东西,希望能够细细研究。

        另外,输入数组A时,应从A[1]开始,因为reutn 0 & -0;的值为0,这样会导致在循环时形成死循环!

区间DP

http://poj.org/problem?id=1738

      如果你认为这个题还是和区间DP一样用DP[50000][50000]来做的话就错了,因为数组开不了那么大!所以,GarsiaWachs算法!

http://poj.org/problem?id=2955 (AC)

http://poj.org/problem?id=1141

http://poj.org/problem?id=3280

http://poj.org/problem?id=1651

http://poj.org/problem?id=1179

http://acm.hdu.edu.cn/showproblem.php?pid=2476 (AC)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537

状态压缩

http://poj.org/problem?id=3254

http://poj.org/problem?id=1185

http://poj.org/problem?id=3311

http://acm.hdu.edu.cn/showproblem.php?pid=3001

http://poj.org/problem?id=2411

http://poj.org/problem?id=2288

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3471

http://acm.hdu.edu.cn/showproblem.php?pid=3681

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777

http://acm.hdu.edu.cn/showproblem.php?pid=3682


你可能感兴趣的:(总结,C语言,ACM)