鉴于某些原因(主要是懒)就不一题一题写了,代码直接去\(OJ\)上看吧
CodeChef Making Change
完全没看懂题解在讲什么(一定是因为题解公式打崩的原因才不是曲明英语太差呢……)
由于\(C=\sum x_i\times a_i\),我们可以把\(x_i\)给二进制分解,然后依次考虑每一位
设\(f_{i,j}\)表示考虑到\(C\)的二进制第\(i\)位,且\(0\)到\(i-1\)位都已经对上,进位为\(j\)的方案数,那么考虑所有\(x_i\)当前这一位,每一个\(a_i\)最多选一个,用一个类似背包的东西计算出\(g_j\)表示总共进位为\(j\)的方案数,转移就是\(f_{i+1,j}+=g_{2j+c_{i+1}}\),其中\(c_{i}\)表示\(c\)的二进制第\(i\)位
时间复杂度\(O(能过)\)
wannfly挑战赛24E
直接离线点分+背包,记得询问得挂到点分树的\(LCA\)上
wannfly挑战赛24F
发现这个柿子长得很像递推数列的通项公式,那么我们相当于已经知道了特征方程的所有解,直接分治\(NTT\)求出原来的特征方程,然后带进去暴力递推出第\(n\)项就行了