[bzoj1596] [Usaco2008 Jan]电话网络
2015-12-21 19:27
239 查看
第一眼以为是傻逼题。。结果发现我才是傻逼
树形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]);并没有什么用= =
树形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]);并没有什么用= =
相关文章推荐
- Xcode7 创建HTTP请求报错
- bzoj 1066 : [SCOI2007]蜥蜴 网络流
- python 网络爬虫(一):世界上最简单的Web浏览器
- PHP 使用telent测试HTTP
- 面试总结7--计算机网络相关问题Part1
- linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)
- 1.TCP/IP基本概念
- Linux网络基础
- Microsoft.XMLHTTP入门
- http://www.cnblogs.com/xdp-gacl/p/4040019.html
- [Cryptography] Network Security Part II
- [Cryptography] Network Security Part I
- Nginx为什么比Apache Httpd高效:原理篇
- 14-《电子入门趣谈》第二章_电子电路的神经网络-2.3经典电路
- 简单的网络数据用文件来缓存
- tcpdump静态编译
- 网络设计中需要考虑的时延latency差异
- HTTP(s)会话劫持思路与实现
- HTTP Header 属性列表
- 常见Http Header返回状态详解