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


京公网安备 11010502036488号