csps模拟测试69
T1:对于二维放棋子我从来就没会过。
首先,对于相差n的列棋子数一定一样,这个我也想到了,但我没想到用它来做DP。
先考虑n=m的,$f[i][j]$为前i列放了j个棋子的方案数
$f[i][j]=\sum \limits_{k=0}^{n}f[i-1][j-k]C_n^i$就是枚举每一列放几个。
复杂度$O(n^3)$
然后在考虑用性质来DP
$f[i][j]=\sum \limits_{k=0}^nf[i-1][j-k](C_n^i)^{(m-i)/n}$
记着DP很活,性质一定要用上。
T2:复杂度线性,应该不难,我没想。
思路卡在了在弹栈的时候如何找到右端点,扩展域单调栈?
维护一个单调递增的单调栈保存左端点的备用集合
首先在第一次弹的时候一定是右侧第一个小于它的,
记录每个$id[top]$为top到top-1的点之间最高的点的位置,在弹栈的时候不断用id更新一个变量k,并用id或k来更新答案。
就是这种及时更新来为以后用的方法还没掌握。
T3:permu
回滚莫队模板题,居然还能撞上????
用个链表就行了。
Zeit und Raum trennen dich und mich.时空将你我分开。