可持久化动态图上树状数组维护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;
}
全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务