寒假学习回顾

这个寒假学的东西不算多啊,学了

1.放假之前讲过的线段树+树状数组

2.博弈论基础(巴什博弈,尼姆博弈,威佐夫博弈,斐波那契博弈,SG函数)

3.数论中的欧拉函数+扩展欧几里得算法(之前学过一直没用到)

4.拓扑排序

5.DP最长子序列问题

6.背包问题(01,完全,分组,多重,二维)

7.数位DP(很基础的数位DP,还不太会用)

这里面线段树和树状数组学习时间最长了,年前基本都在学这个,博弈论学了五六天的感觉,然后两个数论,拓扑排序,最重要的dp基本都刚学了不长时间,一起回顾一下子

一,首先是线段树吧
线段树(建树,查询,pushup,pushdown,更新)应该就这几个函数比较常用,主要学习的递归的算法,递归就用到了堆的思想,其实也没什么好说的,偏向于模板的写法

线段树 单点更新区间更新扫描线求面积,就学了这几种

树状数组稍微灵活一点,结构也没那么臃肿,好用,就是树状数组能完成的线段树都能完成,反之就不是这样了

但我还是喜欢树状数组多一些,树状数组三个函数

int lowbit(int x)  
{  
    return x & (-x);  
}  

求二进制最后一位1

int getsum(int x)  
{  
    int sum = 0;  
    while(x > 0)  
    {  
        sum += c[x];  
        x -= lowbit(x);  
    }  
    return sum;  
}  

向下求和

void update(int x, int num)  
{  
    while(x <= n)  
    {  
        c[x] += num;  
        x += lowbit(x);  
    }  
}  

向上更新

树状数组更新单点,也可以更新区间,就是同时更新[a,b]和区间(b,n],就能完成伪区间更新
树状数组还能求逆序数,这个骚操作比较简单 求逆序数
最后就是二维树状数组,简直和一维的如出一辙,很简单,就是求一个区间的和的时候注意分成四部分求解

二,博弈论

关于博弈论刚开始觉得很简单,后来发现很深奥,够我学好久的,先学点入门够用。。。

1.巴什博弈:若n=k*(m+1) 那么先取者必输,对,很简单

2.威佐夫博弈:首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个先取完者赢,其中先手必败局势为(a,b),(b - a)  * (sqrt(5)+ 1)/ 2 = a,此时先手必败,否则先手胜
3.尼姆博弈:有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜,这个推理就先不看了,结论就是所有石子堆数异或结果为0,此时为必败态,如何由非必败转换为必败态呢,将其中一堆转换为除该堆外剩下所有石子异或之和即可。
4.sg函数这个比较复杂,核心也是一个求sg数组的函数,好好复习
剩下的刚学不久,多看看吧再,就不从这里多写了,去刷刷题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值