acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(0)讨论(0)提交记录(0)
  • 【正经题解】加分二叉树

    这个题可以用动态规划或者记忆化搜索来做。因为如果要求加分最大的话,必须要求它的儿子结点加分最大,所以就有了最优子阶段。我们可以枚举根来更新最大值。中序遍历有个特点,在中序遍历这个序列上,某个点左边的序列一定是这个点的左子树,右边的序列,一定在这个点的右子树。 rootrootroot [ iii , jjj ]表示[ iii , jjj ]这段序列的根,递归输出先序遍历。注意初始化, fff [ iii ][ iii ] =v=v=v [ iii ],当序列只有 III 一个元素时, fff [ iii ][ iii ]等于这个点本身的权值,当 l==r−1l==r-1l==r−1 时,此时是空树设为 111 。 动态规划 区间 dpdpdp

    userId_undefined

    AC君

    小有名气倔强青铜管理员
    23阅读
    0回复
    4点赞
  • 题解

    #include<bits/stdc++.h> using namespace std; #define ll long long ll n,a[50],dp[50][50],root[50][50]; void print(int l,int r){ if(l>r)return; int rt=root[l][r]; cout<<rt<<' '; print(l,rt-1); print(rt+1,r); } int main(){ ios::sync_with_stdio(0); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; dp[i][i]=a[i]; root[i][i]=i; }

    userId_undefined

    法兰西玫瑰

    53阅读
    0回复
    0点赞
  • AC了好吧

    userId_undefined

    .Dream.

    15阅读
    0回复
    1点赞
  • 题解

    内存最优

    userId_undefined

    zhouty

    秩序白银
    4阅读
    0回复
    0点赞
  • 题解(A88.加分二叉树)

    userId_undefined

    老登转世

    0阅读
    0回复
    0点赞
首页