摘要:
引用byvoid大神的解释:树状数组是一个优美小巧的数据结构,在很多时候可以代替线段树。一句话概括就是,凡是树状数组可以解决的问题,线段树都可以解决,反过来线段树可以解决的问题,树状数组不一定能解决。树状数组英文名称为Binary Index Tree,直译过来就是二进制索引树,我觉得二进制索引树更能说明其本质。树状数组的本质就是一种通过二进制位来维护一个序列前i和的数据结构。对于维护的序列A,定义C[i]=A[j+1]+...+A[i],其中j为i的二进制表示中把最右边的1换成0的值。j的值可以通过lowbit求出,即i-lowbit(i)。lowbit(a)为2^(a的二进制表示末尾0的个 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1297题意:求n个人排成一列的方案数,其中男女数量无规定,但是女生至少要两个站在一起。思路:由于有男生和女生,所以n个人排成一列共有2^n种方案。可将这2^n种方案分为合法序列和非合法序列,并设合法序列方案数为F(n)。要注意,每增加一个人,总方案数会变成原来的两倍。我们可以想像n-1个人的所有可能的序列已经排好,增加一个人就是在原来排好的序列的末尾加上一个男生或一个女生。有人会问:为什么只在末尾加,在前面加人不可以吗?其实在前在后加都是一样的,n-1个人排成的序列有2^n-1种,n个人排成的序列有 阅读全文