A;=w=
B:=w=
C:题意:有一排树,有的树已经上色,有的树没有上色,只能给没上色的树上色,一共m种颜色,不同的树上不同的色花费不同,涂完色后,连续颜色的树成为一段。对于给定的段数k,求出最小花费
分析:不是贪心就是dp,这很显然不是贪心
f[i][j][k]表示前i个树,第i个树涂色是j,已经有k段树的最小花费
如果第i个树未染色:f[i][j][k]=min(f[i-1][j][k]+v[i][j],f[i-1][j'][k-1]+v[i][j'])
如果已经染色:f[i][j][k]=min(f[i-1][j][k],f[i-1][j'][k-1]) 注意没花费
注意初始化
D:题意:n个点n条边的有向图,每条边可以改变方向,询问有多少种方法可以使得图中无环
分析:考虑下n个点n条边图的特征
首先能想到的是n个点n-1条边的树加条边成个环
继续想想就会发现不可能存在复环,不然边数就不对了,也就是一个环套树
考虑影响一个环的只有环上的点,所以如果假设环外的点有a个,那么对答案的贡献就是2^a
再考虑环上,一般来说,只要环上一条边方向变了,那环就破坏了,但要注意特殊情况,也就是全部反向和全部不反向,所以如果环上点b个,那么对答案的贡献就是2^b -2
最后要考虑的一点是,有可能是多个连通块,所有答案相乘就可以了
至于实现,可以把所有单向边当作双向边,然后dfs跑一个连通块得出a+b,在跑dfs途中用个栈记录下点,然后重复时就递归栈得出b,所以a和b就都知道了
E:题意:求1-[A(2^n,k)/2^(nk)]的值,要求先约分,再模1e6+3
分析:问题分两个,先是约分,再是模
整理下式子发现,分子分母的质因数只有2,所以最大公约数肯定是2^x
这个x取决于(2^n)!/(2^n - k)!的2的指数
求一个阶乘数中2的指数就那个logn算法 除2除4除8什么的辣
第一个问题解决了
再解决第二个问题,分母可以暴力模,分子头疼的是那k个数乘积的模,因为k很大
注意到mod数很小,所以分子那项乘了mod数后结果就0了,就退出
最后乘上2^x逆元