POJ 3925 - 状态DP.位运算
研读北大的发现这题的...书上介绍的是DFS枚举点..然后最小生成树来找答案...正好前不久做过一些状态 DP的问题..就用状态DP水过了...
对于一类点个数为n=15左右的问题...应该敏感的联想到状态DP...用n位2进制数可以在较好的所有点的状态...此题正是如此...用x ( 0<=x<=2^n) 表示当前的树中有哪些点...
这里用到了两个位运算..
一个是判断十进制整数x在二进制下的第k位是否为1...用 x & (1<另一个是判断 十进制整数x在二进制下有多少位为1...x=x & (x-1) 要执行到x==0的次数即为x中1的个数..原因..因为总能去掉最末尾的1
其实写完之后...发现本质上枚举点做最小生成树和我这种状态DP是一样的...因为我在更新过程中就是Prim的过程...
Program:
#include#include#include#include#include#include
暂时没有评论,来抢沙发吧~