链接:https://ac.nowcoder.com/acm/contest/6290/B

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

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

输入描述:

第一行一个整数 n ,第二行 n 个整数代表该序列。

输出描述:

一行一个整数表示删完序列的最小代价。
示例1
输入
2
3 2
输出
5
备注:
保证答案在-2^63到2^63-1 范围内


思路:本题可以利用贪心的思想,若小于0则让其在原来的位置删除(让负数负得更多),否则从前往后依次删除(每次只需要花费自己那么多)。


#include<iostream>
using namespace std;
int main(){
    long long n,a,sum=0;
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>a;
        if(a<0){
            sum+=a*i;
        }
        else{
            sum+=a;
        }
    }
    cout<<sum;
    return 0;
}