链接: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; }