集训Day4
在bzoj刷了好几天杂题感觉手感不是很好
继续回来集训一下
好几天没更新了啊...
bzoj1875
一个无向图,一个人要从起始点走$t$步走到终点,不能沿着刚走过来那条边回去,问有多少种走法
$m \leq 60$ $t \leq 2^{30}$
由于刚走过来那条边不能走,边数又很小,我们可以考虑把边看成点,弄一个系数矩阵出来然后$t-1$次方就可以了
bzoj3173
一个空序列,每次插入一个数,询问当前最长上升子序列的长度
$n \leq 100000$
I:我们可以用平衡树维护这个序列,插入一个数是$logn$的,询问是$logn$的,直接搞定
II:离线 从最后开始一个一个删除,然后用树状数组查询前缀第k大,正确性显然
II比I不知道短到哪里去了。。。我还是选择和I谈笑风生
bzoj3591
给一个1~n排列的最长上升子序列,求原序列方案数
$n \leq 15$
考虑宽爷爷教我们的状压dp
首先,$nlogn$求最长上升子序列是有一个dp数组的,$dp[i]$表示i的最长上升子序列末尾最小是多少
显然dp[i]是递增的,于是我们可以用S这个状态表示S里面的元素在不在dp[i]里
这样就可以还原出整个最长上升子序列
这道题有个蛋疼的地方就是...要考虑3个东西
1.还没考虑到 2.已经考虑到了 在dp数组里 3.已经考虑到了 但被弹出去了
那我们就麻烦一点
用陈老师教我们的三进制状压dp大力d一发
$O(n 3^n)$还是珂以过的吧...