UVA - 10304 Optimal Binary Search Tree 区间DP
2014-12-19 09:57
411 查看
题目大意:有一棵二叉树,二叉树的最终值 = sum ( 节点的值 * (所在高度- 1) ),这是一棵搜索二叉树,所以左子树的所有节点的值是小于等于根节点,右子树的所有节点的值是大于等于根结点的,求这个二叉树的最终值的最小值
解题思路:刚开始不知道怎么求值,参考了Staginner大神的解析才懂得了,dp[i][j] = dp[i][k-1] + dp[k+1][j] + sum[j] - sum[i-1] -num[k], num[k]是第k个数的值,sum[j]表示的是第1个数到第j个数的和,dp[i][j]表示的是从第i个数到第j个数形成一棵树的状态下的最优值,从i到j中挑选一个节点k当成根节点,左右子树的最优值就是dp[i][k-1]和dp[k+1][j],sum[j] - sum[i-1] - num[k]就表示将i到j的所有节点的值(排除了第k个)的和乘上2,就等同于从第i个到第j个除了第k个外所有的节点的高度都加上了1
解题思路:刚开始不知道怎么求值,参考了Staginner大神的解析才懂得了,dp[i][j] = dp[i][k-1] + dp[k+1][j] + sum[j] - sum[i-1] -num[k], num[k]是第k个数的值,sum[j]表示的是第1个数到第j个数的和,dp[i][j]表示的是从第i个数到第j个数形成一棵树的状态下的最优值,从i到j中挑选一个节点k当成根节点,左右子树的最优值就是dp[i][k-1]和dp[k+1][j],sum[j] - sum[i-1] - num[k]就表示将i到j的所有节点的值(排除了第k个)的和乘上2,就等同于从第i个到第j个除了第k个外所有的节点的高度都加上了1
#include<cstdio> #include<cstring> #define maxn 255 #define INF 0x3f3f3f3f int num[maxn],dp[maxn][maxn],sum[maxn]; int N; int main() { while(scanf("%d",&N) != EOF) { sum[0] = 0; for(int i = 1; i <= N; i++) { scanf("%d",&num[i]); sum[i] = sum[i-1] + num[i]; } for(int k = 1; k < N; k++) for(int i = 1; i + k <= N; i++) { dp[i][i+k] = INF; for(int j = i; j <= i + k; j++) { int temp = dp[i][j-1] + dp[j+1][i+k] + sum[i+k] - sum[i-1] - num[j] ; if(temp < dp[i][i+k]) dp[i][i+k] = temp; } } printf("%d\n",dp[1] ); } return 0; }
相关文章推荐
- 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
- 区间dp(uva10304-Optimal Binary Search Tree)
- 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)
- DP优化——四边形不等式 uva 10304 - Optimal Binary Search Tree
- uva 10304 Optimal Binary Search Tree(DP)
- uva 10304 Optimal Binary Search Tree(dp)
- UVA 10304 - Optimal Binary Search Tree
- Optimal Binary Search Tree - UVa 10304
- UVa 10304 - Optimal Binary Search Tree
- uva_10304 - Optimal Binary Search Tree(最优搜索二叉树)
- UVA 10304 Optimal Binary Search Tree
- uva 10304 Optimal Binary Search Tree
- uva 10304 - Optimal Binary Search Tree