集训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)$还是珂以过的吧...

猜你喜欢

转载自www.cnblogs.com/Kong-Ruo/p/9192135.html