每日一题 5月13日 加分二叉树 区间DP

题目链接:https://ac.nowcoder.com/acm/problem/16681
题目大意:
![图片说明](https://uploadfiles.nowcoder.com/images/20200605/7533514_1591350427159_FF1193FCCF3E9017B3BEABD957AA4124 "图片标题")
![图片说明](https://www.nowcoder.com/equation?tex=%5Cbegin%7Balign*%7D%5Clabel%7B2%7D%0A%26f%5Bi%5D%5Bj%5D%3A%E8%A1%A8%E7%A4%BA%E4%B8%AD%E5%BA%8F%E9%81%8D%E5%8E%86l~r%E5%8C%BA%E9%97%B4%E7%9A%84%E6%9C%80%E5%A4%A7%E5%80%BC%E3%80%82%E6%9E%9A%E4%B8%BE%E6%A0%B9k%E3%80%82%5C%5C%0A%26f%5Bi%5D%5Bj%5D%3Df%5Bi%5D%5Bk-1%5D*f%5Bk%2B1%5D%5Bj%5D%2Bc%5Bk%5D%5C%5C%0A%26%E5%B9%B6%E4%B8%94%E8%AE%B0%E5%BD%95g%5Bi%5D%5Bj%5D%E4%B8%BA%E6%A0%B9%E7%9A%84%E7%BC%96%E5%8F%B7%E3%80%82%0A%0A%5Cend%7Balign*%7D "图片标题")

#include <bits/stdc++.h>
#define LL long long
using namespace std;

LL c[55], f[105][105], g[105][105];
LL DFS(int l, int r){
    if(l>r) return 1;
    if(l==r){
        g[l][r]=l;
        return c[l];
    }
    if(f[l][r]!=-1) return f[l][r];
    for(int k=l; k<=r; k++){
        LL ans=max(f[l][r], DFS(l, k-1)*DFS(k+1, r)+c[k]);
        if(ans>f[l][r]){
            f[l][r]=ans; g[l][r]=k;
        }
    }
    return f[l][r];
}

void put(int l, int r){

    if(l>r) return ;
    printf("%lld ", g[l][r]);
    put(l, g[l][r]-1);
    put(g[l][r]+1, r);
}

int main(){

    memset(f, -1, sizeof(f));
    int n; scanf("%d", &n);
    for(int i=1; i<=n; i++){
        scanf("%lld", &c[i]);
    }
    DFS(1, n);
    printf("%lld\n", f[1][n]);
    put(1, n);

    return 0;
}



全部评论

相关推荐

2024-12-30 19:21
已编辑
University of California Berkeley Java
无敌低代码大王:简历技术栈可以写清楚点,然后你想要优化项目的话,最好找一些其他同样类型的项目提取它的亮点然后加到你的项目去,比如登陆模块,别人用session,redis做登陆,你可以改成用微信扫码的方式登陆,只需要了解业务逻辑就好,不用去实现。
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务