uva 10304 - Optimal Binary Search Tree(区间dp)
2016-04-18 19:48
519 查看
题意:
建一棵树,左子树小于根小于右子数,现要求求出f1*h1+f2*h2+...的最小(f是权值,h是高度)
那么用区间dp,枚举i到j以k为根的最小总数
那么每增加一层(除了根),就会增加sum:i->j并且减去a[k];
建一棵树,左子树小于根小于右子数,现要求求出f1*h1+f2*h2+...的最小(f是权值,h是高度)
那么用区间dp,枚举i到j以k为根的最小总数
那么每增加一层(除了根),就会增加sum:i->j并且减去a[k];
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn = 260; const int INF = 1<<30; int n; int a[maxn]; int sum[maxn]; int dp[maxn][maxn]; int main() { while(scanf("%d", &n) == 1) { sum[0] = 0; for(int i=1; i<=n; i++) { scanf("%d", &a[i]); sum[i] = sum[i-1]+a[i]; } memset(dp, 0, sizeof(dp)); for(int i=2; i<=n; i++) for(int j=i-1; j; j--) { dp[j][i] = INF; for(int k=j; k<=i; k++) { dp[j][i] = min(dp[j][i], dp[j][k-1]+dp[k+1][i]+sum[i]-sum[j-1]-a[k]); } } printf("%d\n", dp[1] ); } return 0; }
相关文章推荐
- Linux操作提示:“Cant open file for writing”或“operation not permitted”的解决办法
- valgrind,arm-linux交叉编译
- arm-linux-gcc-4.3.2.tar.bz2 安装
- Hadoop(一)使用Vagrant搭建linux环境
- Linux内核调试信息如何查看
- 在secureCRT中解决hbase spark shell退格不能删除问题
- OpenGL框架封装--基于NeHe框架
- 最详细的hadoop2.2.0集群的HA高可靠的最简单配置
- nginx配置入门
- Linux下Hook一个共享库函数
- popScene 动画
- linux 下hook函数
- poj1157Little Shop of Flowers(动态规划题)
- Linux System Calls Hooking Method Summary LD_PRELOAD
- 在CentOS 7上快速安装配置WebSphere MQ 7.5快速指南
- Linux Expect 脚本学习资源
- shell并发处理脚本
- Linux C++编译运行过程
- shell脚本之sed使用详解
- 向正在运行的Linux应用程序注入代码