随笔分类 -  SGU

摘要:简单树型DP题意:一个图,N个点,N-1条边,并且说明是树(一棵树,连森林都排除掉了)。在这颗树中删除一个点rt以及和他关联的边,那么剩下的部分将会是森林,统计森林中每棵树的节点数,最大值记录下来为dp[rt],你的任务是找出最小的dp[rt],如果有多个rt相等,那么按升序输出所有rt的编号一个最大值最小的问题,解法是求出所有的dp[rt]然后记录最小值因为本来是一棵树,用哪个做顶点都可以,默认为1,为整个树的祖先。定义sum[rt] = 以rt为根的子树含有的节点数 dp[rt] =dp[rt]:除去rt后,各个分块中节点数的最大值 ans = min{ dp[rt] }; 删掉rt... 阅读全文
posted @ 2013-04-11 23:07 Titanium 阅读(273) 评论(0) 推荐(0)
摘要:状态压缩DP题意:输入n,m,一个n*n的棋盘,放入m个国王,国王不能相互攻击,有多少种放置的可能。国际象棋的国王的攻击范围就是它周围的一圈,一共8个格子(上下左右四个对角)和 poj 1185 炮兵布阵 非常相似 , 同样使用位运算加速,同样可以使用滚动数组代码有详细注释/*state[i]表示第i种状态,即一行内的国王不互相攻击的状态,king[i]对应这种状态有多少个国王关于相邻两行的状态是否能共存的问题,也就是两行的国王会不会相互攻击,state[k]表示第i行的状态,state[kk]表示第i-1行的状态state[k] & state[kk] = 1 , 说明在某一列上有国 阅读全文
posted @ 2013-03-07 23:03 Titanium 阅读(336) 评论(0) 推荐(0)