T1
dy讲的原题。
建议去翻(DC)大神的(dp)视频课。
T2
结论题。
一种想法是抽象为一个(ans+1 n)的矩阵。
每次从上面一段连续区间向底层走。
维护每一个位置最高的高度是多少就可以得到答案了。
这里用一个队列实现。
每一个位置的队列长度可以用来更新答案。
T3
生成函数题。
考虑容斥。
用走了几条输入边来容斥。
设(dp[i][s])为当前在(i)点,经过的点集为(s)的方案数。
设(f[s])为经过的点集为(s)的方案数。
设(g[i][s])为经过了(i)条链的方案数。
设(F[i])为经过了(i)条链再整张图上的方案数。
于是答案就是(sumlimits_{i=1}^{nk}(-1)^{nk-i}F[i])
因为经过的输入边个数是(nk-i)。