CF1175D Array Splitting
思路:数组分成K段,第K段的数会被累加k次,所以可以把题目改成用后缀和数组找到累加值最大的k-1段,再加上整个数组的和。
#include <iostream>
#include <algorithm>
using namespace std
;
const int N
= 3e5+10;
typedef long long ll
;
ll a
[N
];
int main(){
int n
,k
;
ll ans
=0;
cin
>>n
>>k
;
for(int i
=0;i
<n
;++i
)
cin
>>a
[i
];
for(int i
=n
-1;i
>=0;--i
)
a
[i
]=a
[i
+1]+a
[i
];
a
[0]+=1e15;
sort(a
,a
+n
);
for(int i
=n
-1;i
>=n
-k
;--i
)
ans
+=a
[i
];
cout
<<(ans
-(long long)1e15)<<endl
;
return 0;
}
转载请注明原文地址: https://lol.8miu.com/read-24504.html