洛谷每日一题2020

it2025-04-04  9

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; }
最新回复(0)