可持久化动态图上树状数组维护01背包

可持久化动态图上树状数组维护01背包

https://ac.nowcoder.com/acm/problem/19838

题目

有一个长度为 序列 (序列下标从 1 开始),每次可以从任意位置 花费 的代价来把 删除。
注意,删除后 后面的数会依次向前补上(下标 -1 ) 。
求把整个序列删完的最小代价。

解题思路

是正数时,在下标 1 的位置删除代价最小,即
是负数时,在其当前所在下标的位置删除代价最小,即 ,因为下标不能更大了。

C++代码

#include<cstdio>
using namespace std;

int main(){
    int n;
    scanf("%d", &n);
    long long ans = 0;
    int a;
    for(int i=0; i<n; ++i){
        scanf("%d", &a);
        if(a<0)
            ans += 1LL*a*(i+1);
        else
            ans += a;
    }
    printf("%lld", ans);
    return 0;
}
全部评论

相关推荐

11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务