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

  回滚莫队模板题,居然还能撞上????

  用个链表就行了。

posted @ 2019-10-15 16:49  starsing  阅读(166)  评论(0编辑  收藏  举报