1405B - Array Cancellation
题目链接:1405B - Array Cancellation
题目大意:
给一列数组,数组元素和为0,每次操作找两个不同下标i,j,如果让a[i]减一,a[j]加一,如果i小于j则该操作免费,否则,该操作需消耗一块钱,问最少消耗多少钱可以使所有元素都为零。
思路:
为了消耗最少,肯定是先进行免费操作,剩下的必须进行付费操作的再进行付费操作,可以遍历一遍数组,将元素累加,如果累加和变为负数了,把他变为0,因为在他之后一定会有一个等于负数相反数的正数。
参考代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int main() { 5 ll s,n,a,t; 6 cin >> t; 7 while(t--) { 8 cin >> n; s = 0; 9 for(ll i = 1; i <= n; i++) { 10 cin >> a; 11 s = max(0LL,s+a); 12 } 13 cout << s << endl; 14 } 15 return 0; 16 }

浙公网安备 33010602011771号