区间dp(uva10304-Optimal Binary Search Tree)
来源:互联网 发布:安卓开发 布局优化 编辑:程序博客网 时间:2024/06/08 03:44
题意:给一个序列,序列从小到大排序,要把这些树构成一个二叉搜索树。 要求sum = f(e1)*cost(e1) + f(e2)*cost(e2) + ... + f(en)*cost(en),sum值最小。其中f表示数的频率,cost表示数在树种的深度(从0开始)
思路:枚举根节点,设ei为根节点,在序列中ei左边的所有数会构成ei的左子树,ei的右边的所有数会构成ei的右子树,从中选择sum最小的一种方案
设d[i][j]表示序列区间(i, j)的数构成的一棵最优二叉查找树的值,当枚举根节点ek时,它的左子树所有节点的深度都会增加1,那么左子树增加sum[i][k-1],右子树的值也会增加sum[k+1][j]
状态转移方程: dp[i][j] = min{dp[i][k-1]+dp[k+1][j]+sum[j]-sum[i-1]-a[k] | i<=k<=j}
/* uva10304 gaolee */#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;const int maxn=300;int dp[maxn][maxn];int N,a[maxn];int sum[maxn];int main(){ while(scanf("%d",&N)!=EOF) { memset(sum,0,sizeof(sum)); 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=1;j+i-1<=N;j++) { int l=j,r=j+i-1; int ans=INF; for(int k=l;k<=r;k++) ans=min(dp[l][k-1]+dp[k+1][r]+sum[r]-sum[l-1]-a[k],ans); dp[l][r]=ans; } } printf("%d\n",dp[1][N]); } return 0;}
0 0
- 区间dp(uva10304-Optimal Binary Search Tree)
- uva10304 Optimal Binary Search Tree
- UVA10304-Optimal Binary Search Tree(最优二分检索树)
- Optimal Binary Search Tree+区间dp+uva
- uva-10304 Optimal Binary Search Tree(区间dp)
- uva 10304 - Optimal Binary Search Tree(区间dp)
- UVA 10304 Optimal Binary Search Tree (区间dp)
- uva 10304 Optimal Binary Search Tree (区间DP)
- uva 10304 - Optimal Binary Search Tree(区间dp)
- uva10304 - Optimal Binary Search Tre(区间动态规划)
- UVA10304- Optimal Binary Search Tree(最优排序二叉树OBST)
- uva 10304 Optimal Binary Search Tree(区间dp)
- UVa 10304 Optimal Binary Search Tree / 区间DP
- UVA - 10304 Optimal Binary Search Tree 区间DP
- uva10304(区间dp)
- uva 10304 Optimal Binary Search Tree(dp)
- uva 10304 Optimal Binary Search Tree(DP)
- uva 10304 Optimal Binary Search Tree 最优二叉树编码 区间dp
- log4j的配置--粗浅的拿来主义啊
- shell 脚本
- SVN和GIT的区别
- stringstream与snprintf性能对比测试
- Python-Image模块
- 区间dp(uva10304-Optimal Binary Search Tree)
- Python基础3--函数
- 零基础学HTML 5实战开发(第一季)
- android ListView详解
- ssh brute force attack IP list
- 高德地图使用注意事项
- webView学习笔记
- 《天下没有难学的Linux 大学生攻克Linux系统教程(S1.0) 》
- java的final关键字