加分二叉树[NOIP 2003提高组][Codevs 1090]
来源:互联网 发布:淘宝怎么改名字啊 编辑:程序博客网 时间:2024/05/09 20:55
题目描述 Description
设一个
若某个子树为主,规定其加分为
试求一棵符合中序遍历为
现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。
输入描述 Input Description
第
第
输出描述 Output Description
第
第
样例输入 Sample Input
5
5 7 1 2 10
样例输出 Sample Output
145
3 1 2 4 5
数据范围及提示 Data Size & Hint
分数
分析 I Think
因为设
记
代码 Code
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int f[40][40];int r[40][40];int a[40];int n;void display(int,int);int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i){ f[i][i] = a[i]; r[i][i] = i; f[i][i+1] = a[i]+a[i+1]; r[i][i+1] = i; } for(int i=n-2;i>=1;--i) for(int j=i+2;j<=n;++j){ f[i][j] = a[i]+f[i+1][j]; r[i][j] = i; if(a[j]+f[i][j-1] > f[i][j]){ f[i][j] = a[j]+f[i][j-1]; r[i][j] = j; } for(int k=i+1;k<j;++k) if(a[k]+f[i][k-1]*f[k+1][j] > f[i][j]){ f[i][j] = a[k]+f[i][k-1]*f[k+1][j]; r[i][j] = k; } } printf("%d\n",f[1][n]); display(1,n); return 0;}void display(int L,int R){ printf("%d ",r[L][R]); if(L < r[L][R]) display(L,r[L][R]-1); if(R > r[L][R]) display(r[L][R]+1,R);}
0 0
- 加分二叉树[NOIP 2003提高组][Codevs 1090]
- [NOIP提高组2003]加分二叉树
- 加分二叉树 2003年NOIP全国联赛提高组
- 加分二叉树 2003年NOIP全国联赛提高组
- 「2003NOIP提高组」加分二叉树
- NOIP 2003 提高组 复赛 加分二叉树
- NOIP 2003 加分二叉树
- NOIP 2003 加分二叉树
- Noip 2003 加分二叉树
- Noip 2003 加分二叉树
- 加分二叉树 noip
- CJOJ 1010【NOIP2003】加分二叉树 / Luogu 1040 加分二叉树 /CodeVS 1090 加分二叉树
- Noip 2003T3 加分二叉树
- [NOIP 2003] 加分二叉树:DP
- 【NOIP2003提高组】加分二叉树
- NOIP2003提高组 加分二叉树
- 集训-加分二叉树[NOIP2003提高组]
- 【codevs 1090】加分二叉树(记忆化搜索)
- B
- typedef struct和struct的用法
- script.fex 与 script.bin文件转换
- sql语句练习50题
- RapidJSON学习整理
- 加分二叉树[NOIP 2003提高组][Codevs 1090]
- caffe基础(8):draw_net.py绘制网络结构
- WINCC 7.2 中文版—真正的中文版
- HDU 4966 (最小树形图)
- zookeeper入门
- 地图匹配算法实践
- 函数内部属性arguments和this讲解
- Longest Common Prefix Leetcode Python Java
- Android Studio关联SVN相关操作