题意:给你一个长度为N的数组A,再给你一个c,你可以选一个区间l-r,这个区间里的每个数都乘以C(可能是负数) ,求A数组和的最大值。
思路:c有可能为负,所以我们可以考虑两种情况,一种是l-r的和最大,另一种是l-r和最小,比较即可AC
code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int n, c;cin >> n >>c;
int sum = 0, now = -1e9, now2 = 1e9, mx = 0, mn = 0;//sum:和,mx:最大的一段和,mn:最小的一段和
for (int i = 1; i <= n; i++){
int x;cin >> x;
sum += x;//累积sum
now = max(x, now + x);
now2 = min(x, now2 + x);
mx = max(mx, now);
mn = min(mn, now2);
}
cout << max(sum + mx * (c - 1), sum + mn * (c - 1)) << endl; //比较两种情况哪个更大
return 0;
}
本蒟蒻第二篇题解,望多多支持