#include <bits/stdc++.h>
// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization("unroll-loops")
using namespace std;
#define ll long long
#define vtn 3004
#define fmax 1000007
#define fi first
#define se second
#define sp << " "
#define el << "\n"
#define oo 1e9
// #define int ll
#define pii pair<int,int>
#define pb push_back
#define FOD(i,b,a) for(int i = (int)b; i >= (int)a; i--)
#define FOR(i,a,b) for(int i = (int)a; i <= (int)b; i++)
#define NAME "KD"
#define faster ios_base::sync_with_stdio(0); cin.tie(0);
template<class T> inline bool maximize(T &r, const T &v) {return r < v ? r = v, 1 : 0;}
template<class T> inline bool minimize(T &r, const T &v) {return r > v ? r = v, 1 : 0;}
//0x3f = oo
int n, k;
ll a[fmax];
ll dp[5007][5007], tl[fmax];
bool ok = 1;
int cnt = 0;
void solve(){
cin >> n >> k;
FOR(i,1,n){
cin >> a[i];
a[i] < 0 ? cnt++ : 0 ;
}
if(cnt > 1) ok = 0;
FOR(i,1,n){
tl[i] = tl[i - 1] + a[i];
}
if(ok){
ll sum1 = 0, sum2 = 0;
FOR(i,1,n){
if(a[i] <= 0){
sum2 = sum1;
sum1 = 0;
}else{
sum1+= a[i];
}
}
if(k == 1) cout << max(sum1, sum2);
else cout << sum1 + sum2;
}
else if(k == 1){
ll res = 0, mx = 0;
FOR(i,1,n){
// cerr << i sp << mx el;
mx = max(a[i], mx + a[i]);
res = max(res, mx);
}
cout << res;
}
else if(n <= 5000 && k <= 5000){
FOR(i,1,n){
FOR(j,1,k){
dp[i][j] = max(dp[i][j], dp[i - 1][j]);
FOD(f,i,1){
dp[i][j] = max(dp[i][j], dp[f - 1][j - 1] + tl[i] - tl[f - 1]);
}
}
}
cout << dp[n][k];
}
// FOR(j,0,k){
// FOR(i,1,n){
// cerr << dp[i][j] sp;
// }
// cerr el;
// }
}
signed main(){
faster
if(fopen(NAME".inp", "r")){
freopen(NAME ".inp", "r", stdin);
freopen(NAME ".out", "w", stdout);
}
int test = 1;
// cin >> test;
while(test--){
solve();
}
return 0;
}
Compilation message (stderr)
feast.cpp: In function 'int main()':
feast.cpp:84:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
84 | freopen(NAME ".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
feast.cpp:85:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
85 | freopen(NAME ".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |