首页 > 其他 > 详细

[bzoj1596] [Usaco2008 Jan]电话网络

时间:2015-12-21 20:14:50      阅读:282      评论:0      收藏:0      [点我收藏+]

  第一眼以为是傻逼题。。结果发现我才是傻逼

  树形dp,因为存在两个相邻的点都没建塔却都被覆盖的情况,比如说自己和父亲都没建塔,但祖父和自己的孩子都建了。。。

  所以一个点应该有三种状态:建塔,没建塔但被某个孩子覆盖(孩子建了塔),自己和所有孩子都没建塔。

  f[i][1],f[i][2],f[i][0]分别表示以上三种状态时,点i所在子树建的最少塔数

  f[i][1]=1+sum{ min( f[j][1],f[j][2],f[j][0] ) },(j是i的儿子);

  f[i][2]=min{ f[j][1]+sum{ min(f[k][1],f[k][2]) } },(j和k都是i的儿子,且k不等于j);sum{ min(f[k][1],f[k][2]) }可以在外面先求出来

  f[i][0]=sum{ f[j][2] };(j是i的儿子)

技术分享View Code

//代码中f[i][3]=min(f[i][0],f[i][1]);并没有什么用= =

[bzoj1596] [Usaco2008 Jan]电话网络

原文:http://www.cnblogs.com/czllgzmzl/p/5064626.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!