poj 2057 树形dp ,特别考思路的好题。
来源:互联网 发布:linux nexus 启动 编辑:程序博客网 时间:2024/05/13 00:06
poj 2057 虽然是树形dp
题目描述:现在你在树根上,你的房子在任意一个叶子上面,然后你要找遍所有的叶子取找你的房子,没选择一条路,你必须走到叶子或者树的分支上面可能有一些毛毛虫,他们可以告诉你后面的叶子有没有房子,如果没有你就可以返回。现在让你求出找到房子的期望。
但是其实这个问题不算是dp ,或者说是dp 的弱化,其实是重点是考察一个分析的能力
首先拿道这个题目的想到了树形dp 要求的折返,和不折返的情况,但是怎么解决更新问题,怎么选择走的方向,因为是要找一条可走的最优方向(最优,说明要用dp),这两个问题往下就不太能分析出来了。
去问了一下学长,
首先要把这个问题 分成两部分,一部分是走的路里面有房子的期望,一部分是没有房子的最快折返期望。
重点是解决方向选择:
怎么选择你要走的路? 分析可以发现对于每一个分支来说,
他有 i,i+1....j 这样法分支,如果这个恰好是最佳顺序。
那么 i+1 的折返和找到房子,是要加上i的折返期望的。
……
……
j 的折返和找到房子,是要加上i、i+1…… j-1 的折返期望的。
根据这个关系 我们可以这样看
f[i]表示 i 的折返期望
in[i]表示 以i为根的树的叶子个数。
success[i+1](i+1找到房子) =( f[i])*in[i]);
success[i+2](i+2找到房子) =( f[i]+f[i+1])*in[i+2]);
success[i+3](i+3找到房子) =( f[i+2]+f[i+1]+f[i])*in[i+3]);
success[j](j找到房子) =( f[i-3]+……+f[j-1])*in[j+3];
如果 i+1 比 i 更优
那么我们交换 i+2 与 i+1的顺序
success[i+2](i+2找到房子) =( f[i])*in[i+2];
success[i+1](i+1找到房子) =( f[i]+f[i+2])*in[i+2]);
化简也就是要
f[i+2]/in[i+2] < f[i+1]/in[i+1]
的时候相邻的两个就可以交换, 那么这么就可以运用冒泡排序的思想,那么
按f[j]/in[j]的顺序排,则是我们的最优选择情况 。
- poj 2057 树形dp ,特别考思路的好题。
- poj 3373 比较好的搜索 ,思路特别好
- poj 1849 Two 树形dp好题
- poj 2486 (树形dp (好题))
- POJ 1849 Two(树的直径--树形DP)(好题)
- POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
- poj 2057 树形dp
- poj 2057 树形dp
- poj-2057-树形dp
- poj 1054 考思路的动规
- 树形DP POJ3659 好难的一道题
- poj 2486 Apple Tree(树形DP,状态好纠结。。。)
- poj2486 Apple Tree 树形dp好题
- hdu3899 JLUCPC--树形dp(好题)
- HDU 2196【树形dp*好题】
- poj 3162 树形dp+单调队列 很好的题
- [BZOJ2064]-分裂-状压dp思路好题
- poj 3107(简单的树形dp)
- 查找元素问题
- 稀疏矩阵相加(十字链表实现)
- [原创]解决Unicode的乱码问题
- Linux下Rtl8139too网卡设备驱动程序关键函数剖析
- postgresql 多行变一行,C语言自定义函数
- poj 2057 树形dp ,特别考思路的好题。
- 十字链表存储表示随机稀疏矩阵
- jsp数据库池连接的详细解析(mysql为例)
- 软件开发方法论概述
- Sonic R-Basic knowledge finishing
- 论中西方文化之间的差异
- poj 1191 普通dp
- 消息称谷歌明年将推流媒体电影服务
- Windows网络编程