【题解】[scoi2006]zh_tree
2014-02-20 08:58
253 查看
这题知道了方法之后是比较水。。。不过我还是太弱,没自己看出。。
先要明确中序遍历的定义:先访问左子树,再访问本身,再访问右子树。。。。原来我一直把这个概念与先序遍历弄反了。。wa了一个多小时。。
说说正解:
先明确h1f1+h2f2+…+hnfn=(h1d1+h2d2+…+hndn)/S.所以我们只需求出最小(h1d1+h2d2+…+hndn),最后再除以S就好了。。
然后定义状态:dp[l][r][dep]表示在dep深度的中序遍历为l,l+1,……r的最小hldl+h(l+1)d(l+1)+…+hrdr。
然后就记忆化搜索,每次枚举哪一个点作为根节点。。。其左边作为左子树,右边作为右子树递归下去求解就好了。。
先要明确中序遍历的定义:先访问左子树,再访问本身,再访问右子树。。。。原来我一直把这个概念与先序遍历弄反了。。wa了一个多小时。。
说说正解:
先明确h1f1+h2f2+…+hnfn=(h1d1+h2d2+…+hndn)/S.所以我们只需求出最小(h1d1+h2d2+…+hndn),最后再除以S就好了。。
然后定义状态:dp[l][r][dep]表示在dep深度的中序遍历为l,l+1,……r的最小hldl+h(l+1)d(l+1)+…+hrdr。
然后就记忆化搜索,每次枚举哪一个点作为根节点。。。其左边作为左子树,右边作为右子树递归下去求解就好了。。
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> using namespace std; const int inf=0x3f3f3f3f; double dp[30+10][30+10][30+10]; bool vis[30+10][30+10][30+10]; int n; double k,c; int S=0; int d[30+10]; double dfs(int l,int r,int dep) { if(l>r)return 0; if(l==r)return (k*(dep+1)+c)*d[l]; if(vis[l][r][dep])return dp[l][r][dep]; vis[l][r][dep]=true; dp[l][r][dep]=inf; for(int i=l;i<=r;i++) { dp[l][r][dep]=min(dp[l][r][dep],dfs(l,i-1,dep+1)+dfs(i+1,r,dep+1)+(k*(dep+1)+c)*d[i]); } return dp[l][r][dep]; } int main() { scanf("%d%lf%lf",&n,&k,&c); for(int i=1;i<=n;i++) { scanf("%d",&d[i]); S+=d[i]; } printf("%.3f\n",dfs(1,n,0)*1.0/S); return 0; }
相关文章推荐
- bzoj千题计划184:bzoj1261: [SCOI2006]zh_tree
- BZOJ 1261: [SCOI2006]zh_tree( 区间dp )
- BZOJ 1261: [SCOI2006]zh_tree 区间DP
- BZOJ1261: [SCOI2006]zh_tree
- 【BZOJ1261】【SCOI2006】【zh_tree】【记忆化搜索】
- 1261: [SCOI2006]zh_tree
- bzoj1261: [SCOI2006]zh_tree
- BZOJ 1261: [SCOI2006]zh_tree 区间dp
- BZOJ 2594 Wc2006 水管局长数据加强版 Link-Cut-Tree
- 【BZOJ】【P2330】【SCOI2009】【糖果】【题解】【差分约束系统】
- [81][E][leetcode 题解]Minimum Depth of Binary Tree
- [BZOJ1263][SCOI2006]整数划分
- BZOJ 1293 [SCOI2009] 生日礼物 题解与分析
- LeetCode题解:Binary Tree Paths
- BZOJ 1263 SCOI 2006 整数划分 高精度
- bzoj1263: [SCOI2006]整数划分(高精度+构造)
- LeetCode题解:Binary Tree Postorder Traversal
- bzoj 1263: [SCOI2006]整数划分
- 【杂谈】[scoi2006]整数划分
- 【BZOJ1084】【杂题DP】[SCOI2005]最大子矩阵 题解