P3349 [ZJOI2016]小星星

P3349 [ZJOI2016]小星星

对于子集\(DP\)的优化一般要上容斥。

如果只是暴力枚举当前点以及子集状态的话一共要\(O(3^n)\),而容斥后可以优化成\(O(n*2^n)\)

一般容斥都是把条件改成“至多”“至少”如何如何,这样我们枚举状态,然后\(DP\)中就不需要记录子集了。

就是考虑从最原始的暴力\(DP\)\(f[i][j][S]\)表示在树中\(i\)节点表示原图的\(j\),且子树状态为\(S\)的方案数。转移需要\(O(n^3*3^n)\)

考虑容斥将条件变成至多,那我们先枚举已用点的状态,然后设\(f[i][j]\)表示当前点\(i\)表示原图的\(j\)的方案数,\(O(n^3*2^n)\)即可求解。

posted @ 2021-05-06 22:06  jz929  阅读(59)  评论(0编辑  收藏  举报