Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long lli;
- const int N = 5e4;
- const int K = 1000;
- lli qs[N + 1], dp[N + 1][2];
- int main(){
- int n, parts, m;
- scanf("%d%d%d", &n, &parts, &m);
- for(int i = 1; i <= n; ++i){
- scanf("%lld", &qs[i]);
- qs[i] += qs[i - 1];
- }
- for(int i = 0; i <= n; ++i){
- dp[i][0] = 0;
- }
- for(int p = 1; p <= parts; ++p){
- int cur = p % 2;
- int prv = cur ^ 1;
- dp[0][cur] = 1e18;
- lli pm1 = 1e18;
- lli pm2 = 1e18;
- for(int i = 1; i <= n; ++i){
- if(i - m + 1 > 0){
- if(i - m + 1 == 1){
- pm1 = min(pm1, p == 1 ? 0 : (lli)1e18);
- } else {
- pm1 = min(pm1, dp[i - m - 1][prv] - qs[i - m]);
- }
- }
- if(i >= m){
- pm2 = min(pm2, qs[i] + pm1);
- }
- dp[i][cur] = pm2;
- }
- }
- cout << qs[n] - dp[n][parts % 2];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement