Advertisement
SuitNdtie

Destruction

May 11th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include<stdio.h>
  2. typedef long long int ll;
  3. ll const inf = 1e18;
  4.  
  5. ll max(ll a,ll b){
  6.     return (a > b ? a : b);
  7. }
  8. int main()
  9. {
  10.     int n,K,m;
  11.     scanf("%d %d %d",&n,&K,&m);
  12.     ll arr[n+1];
  13.     ll qs[n+1];qs[0] = 0;
  14.     arr[0] = 0;
  15.     for(int i = 1 ; i <= n ; i ++){
  16.         scanf("%lld",&arr[i]);
  17.         qs[i] = qs[i-1] + arr[i];
  18.     }
  19.    
  20.     ll dp[n+1][2];
  21.     for(int i = 0 ; i <= 1 ; i ++)dp[0][i] = -inf;
  22.     for(int i = 0 ; i <= n ; i ++)dp[i][0] = qs[i];
  23.    
  24.     for(int k = 1 ; k <= K ; k ++){
  25.         ll maxPrefix = -inf;
  26.         if(k == 2)dp[0][k%2] = -inf;
  27.         for(int I = 1 ; I <= n ; I ++){
  28.             ll ans = dp[I-1][k%2] + arr[I];
  29.         //  printf("skiped %lld : (%lld + %lld) = %lld\n",I,dp[I-1][k],arr[I],ans);
  30.             if(I-m+1 >= 1){
  31.                 maxPrefix = max(maxPrefix,((I-m+1)-2 >= 0 ? dp[(I-m+1)-2][(k+1)%2] : dp[0][(k+1)%2]) + arr[I-m]);//dp[(I-m+1)-2])
  32.             }
  33.         //  printf("Test (%lld,%lld) : ans = max(%lld,%lld)\n",maxPrefix,ans);
  34.             ans = max(maxPrefix,ans);
  35.         //  printf("Test (%lld,%lld) : %lld\n",I,k,ans);
  36.             dp[I][k%2] = ans;
  37.         //  printf("%lld ",dp[I][k%2]);
  38.         }
  39.     //  printf("\n");
  40.     }
  41.     printf("%lld",dp[n][K%2]);
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement