fork download
  1. #include <iostream>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. long long int dp[2][10001];
  6. long long int xs[10001];
  7. int main() {
  8. memset(dp,0,sizeof(dp));
  9. memset(xs,0,sizeof(xs));
  10. int n,k;
  11. cin>>n>>k;
  12. for(int i=0;i<n;i++){
  13. cin>>xs[i];
  14.  
  15. }
  16. for(int i=0;i<n;i++){
  17. for(int j=i;j<n;j++){
  18. dp[1][j+1]=max(dp[1][j+1],dp[0][i]+xs[j]);
  19. dp[0][j+k]=max(dp[0][j+k],dp[0][i]+xs[j]);
  20. }
  21. for(int j=i;j<n;j++){
  22. if(j<i+k){
  23. if(i==1)cout<<"("<<i<<" "<<j<<" "<<k<<")";
  24. dp[1][i+k]=max(dp[1][i+k],dp[1][i]+xs[j]);
  25. dp[0][j+k]=max(dp[0][j+k],dp[1][i]+xs[j]);
  26. }else{
  27. if(i==1)cout<<"("<<i<<" "<<j<<")";
  28. dp[1][j+1]=max(dp[1][j+1],dp[1][i]+xs[j]);
  29. dp[0][i+k]=max(dp[0][i+k],dp[1][i]+xs[j]);
  30. dp[0][i+k]=max(dp[0][i+k],dp[1][i]);
  31. }
  32. }
  33. }
  34. long long int ans=0;
  35. for(int i=0;i<10000;i++){
  36. if(ans<dp[0][i])ans=dp[0][i];
  37. if(ans<dp[1][i])ans=dp[1][i];
  38. //cout<<"("<<i<<","<<dp[0][i]<<","<<dp[1][i]<<")";
  39. }
  40. cout<<ans<<endl;
  41. return 0;
  42. }
Success #stdin #stdout 0.01s 5300KB
stdin
20 2
924627176 831397340 164783720 215543892 979742980 924963038 634722211 747236231 495518691 605527991 968366382 706204608 828466032 277983427 165214607 321943325 125622379 569078874 442586570 699395955
stdout
(1 1 2)(1 2 2)(1 3)(1 4)(1 5)(1 6)(1 7)(1 8)(1 9)(1 10)(1 11)(1 12)(1 13)(1 14)(1 15)(1 16)(1 17)(1 18)(1 19)10227632305