加分二叉树
来源:互联网 发布:淘宝商城首页女装 编辑:程序博客网 时间:2024/05/29 09:12
QAQ
递归分根节点去求最大值,记录每个区间最大值的节点,记录下来。
递归输出。
记忆化搜索AC
#include <cstdio>#include <iostream>#define ll long longusing namespace std;ll a[99999];ll ss[99999];ll maxd[999][999],root[999][999];ll dfs(int l,int r){ if(maxd[l][r]) return maxd[l][r]; int ans=0,id; if(l>r) return 1; if(l==r) return a[l]; for(int i=l;i<=r;i++) { ll d=dfs(l,i-1)*dfs(i+1,r)+a[i]; if(d>maxd[l][r]) { root[l][r]=i; maxd[l][r]=d; } } //printf("%d ",id); /*if(l+2==r) printf("%d %d %d ",l,l+1,r); else printf("%d ",id);*/ return maxd[l][r];}void print(int l,int r){ if(l>r) return; if(l==r) { printf("%d ",l); return; } printf("%d ",root[l][r]); print(l,root[l][r]-1); print(root[l][r]+1,r);}int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); ll ans=dfs(1,n); /*for(int i=1;i<=n;i++) { int d=dfs(1,i-1)*dfs(i+1,n)+a[i]; if(d>ans) id=i,ans=d; }*/ printf("%lld\n",ans); print(1,n);}
阅读全文
0 0
- 加分二叉树
- 1078 加分二叉树
- 加分二叉树_DP
- 加分二叉树
- 二叉树--面试加分
- 加分二叉树
- vijos1100 加分二叉树
- 加分二叉树
- 1090 加分二叉树
- Codevs1090 加分二叉树
- 加分二叉树
- NOIP2003 加分二叉树
- P1073 加分二叉树
- ssl1033 加分二叉树
- 加分二叉树
- 加分二叉树
- P1100 加分二叉树
- 加分二叉树 noip
- ude协议—基于udp的全双工可靠传输协议
- ubuntu 64位安装执行可执行文件 提示 “没有那个文件或目录”
- 听高手讲设计心得
- OSG中could not find plugin to read objects from file
- mysql优化–explain分析sql语句执行效率
- 加分二叉树
- 微软小冰微博私信接口
- SSH记账管理系统
- linux学习---文件I/O和标准I/O
- 基于jdk8的格式化时间方法
- python学习第一周
- 保险1-概述
- 朴素贝叶斯——完整代码
- Selenium WebDriver 中鼠标事件