CodeVS 1090 [NOIP 2003] 区间DP 解题报告
来源:互联网 发布:flash10.0软件下载 编辑:程序博客网 时间:2024/06/10 02:36
题目描述 Description
设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:
subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数
若某个子树为主,规定其加分为1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。
试求一棵符合中序遍历为(1,2,3,…,n)且加分最高的二叉树tree。要求输出;
(1)tree的最高加分
(2)tree的前序遍历
现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。
输入描述 Input Description
第1行:一个整数n(n<=30),为节点个数。
第2行:n个用空格隔开的整数,为每个节点的分数(分数<=100)
输出描述 Output Description
第1行:一个整数,为最高加分(结果不会超过4,000,000,000)。
第2行:n个用空格隔开的整数,为该树的前序遍历。
样例输入 Sample Input
5
5 7 1 2 10
样例输出 Sample Output
145
3 1 2 4 5
数据范围及提示 Data Size & Hint
n(n<=30)
分数<=100
【解题报告】
用f(i,j)表示 i 到 j 段的最大加分,p(i,j)表示根节点
则f(i,j)=max{f(i,k−1)∗(f(k+1,j)+wk}
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 35int n,v[N];int f[N][N],p[N][N];int dp(int l,int r){ if(l>r) return 1; if(~f[l][r]) return f[l][r]; if(l==r) { p[l][r]=l; return v[l]; } int &ans=f[l][r],&pos=p[l][r]; for(int i=l;i<=r;i++) { if(dp(l,i-1)*dp(i+1,r)+v[i]>ans) { ans=dp(l,i-1)*dp(i+1,r)+v[i]; pos=i; } } return ans; }void print(int l,int r){ int pos=p[l][r]; printf("%d ",pos); if(l<=pos-1) print(l,pos-1); if(pos+1<=r) print(pos+1,r); }int main(){ memset(f,-1,sizeof(f)); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&v[i]); printf("%d\n",dp(1,n)); print(1,n);puts(""); return 0;}
阅读全文
0 0
- CodeVS 1090 [NOIP 2003] 区间DP 解题报告
- CodeVS 3657 区间DP 解题报告
- codevs 1966 乘法游戏 区间DP 解题报告
- NOIP 2007矩阵取数游戏 解题报告(区间型DP)
- codevs 1253 超级市场 DP 解题报告
- codevs 1219 骑士游历 DP 解题报告
- codevs 2622 数字序列 DP 解题报告
- codevs 1620 轮船问题 DP 解题报告
- codevs 1198 NOIP 2012 国王的游戏 高精度 解题报告
- codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
- codevs 1137||NOIP 2011 计算系数 二项式定理 解题报告
- CDOJ 1321 区间DP 解题报告
- CodeVS3657 括号序列 解题报告【区间DP】
- codevs 1380 没有上司的舞会 DP 解题报告
- codevs 1047 邮票面值设计 DFS+DP 解题报告
- codevs 1267 老鼠的旅行 DP 解题报告
- codevs 2800 送外卖 floyd+状压DP 解题报告
- NOIP 2000乘积最大 解题报告(划分型DP)
- Linux常用命令
- kotlin学习day10: 枚举和字符串模板
- Android开发环境部署——非常详细的Android开发环境搭建教程(windows 环境)
- Tensorflow中GRU和LSTM的权重初始化
- EPS加载影像问题记录(掩膜换裁切)
- CodeVS 1090 [NOIP 2003] 区间DP 解题报告
- 应用开发者必须了解的Kubernetes网络二三事
- JS获取浏览器或者系统宽高
- 通过form定义参数传值
- Android 版本与 Bluetooth 版本之间的关系
- CentOS Docker 安装
- 预处理器,编译器,汇编器,连接器
- vmware磁盘动态扩容
- 1.安装jdk