题解 | 秘藏

秘藏

https://www.nowcoder.com/practice/2ff33cc017d84907b3d2cf38fd138b81

显然这题可以用动态规划求解,而且发现只与上一个状态有关,所以可以滚动,详情看代码

	int n, k;
    rd(n, k);
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) rd(a[i]);
    ll cdp1 = 0, cdp0 = 0, ldp1 = 0, ldp0 = 0;
    for (int i = 1; i <= n; i++) {
        int bi; rd(bi);
        if (ldp1) cdp1 = ldp1 + bi;
        if (ldp0 >= k) cdp1 = max(cdp1, ldp0 + bi - k);
        cdp0 = ldp0 + a[i];
        if (ldp1 >= k) cdp0 = max(cdp0, ldp1 + a[i] - k);
        ldp1 = cdp1;
        ldp0 = cdp0;
    }
    println(max(cdp1, cdp0));

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务