状压DP
Winterfell30
这个作者很懒,什么都没留下…
展开
-
POJ 3420 Quad Tiling (瓷砖问题+矩阵快速幂)
题意有一个树,每条边都有权值,求每一个点出发的链的最大权值和。思路很经典的树形dp题目,和树的直径的性质相关。 从任意点出发能到达的最远的点一定是直径的一个端点,然后再从这个端点出发能到达的最远的点就是另一个断点,中间的边就是这个树的直径。 我们用两个dfs,第一次维护一个点到他的子树的最长路,第二次用来更新结果。比如u点的最长路,要么从他到他的子树叶节点,要么是从u到达根节点加上根节点到距离根原创 2016-05-31 16:26:01 · 766 阅读 · 0 评论 -
Codeforces 11D - A Simple Task (状压DP)
题意求出一个n个点m个边的图,求简单环有多少(没有重复点和边)。思路这是个不错的题,这个状压dp保存的状态不是直接的环,而是路径的个数。s表示的状态为一条路径,则dp[s][i]表示以s的最小编号为起点,以i为终点的环的个数。那么我们就可以通过枚举状态,枚举状态中的起点和枚举路径外的终点,然后判断终点和起点是否相连来判断是否成环。代码 #include <stdio.h>#include <str原创 2016-05-08 19:17:29 · 1379 阅读 · 0 评论 -
Codeforces 16E Fish (状压dp+概率)
题意有n条鱼,他们相遇时会吃掉对方,给出他们相遇时双方获胜的概率,求这n条鱼最后剩下自己的概率。思路看范围就要考虑状压DP,dp[s]表示当前剩下的鱼的状态为s时的概率。 那么P(i吃掉j) = P(i和j同时存在) *P(ij相遇)* P(i战胜j) 即dp[s ^ (1 << j)] += dp[s] * p[i][j] * 1 / (num * (num - 1) / 2)。num是当原创 2016-05-08 19:00:05 · 1067 阅读 · 0 评论