fork(1) download
  1. #include <iostream>
  2. #include <string.h>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6. long long int dp[2][10003];
  7. long long int data[10003];
  8. int main() {
  9. // your code goes here
  10. int n,m;
  11. memset(dp,0,sizeof(dp));
  12. memset(data,0,sizeof(data));
  13. cin>>n>>m;
  14. for(int i=0;i<n;i++){
  15. cin>>data[i];
  16. }
  17. //ずっと頭がぼーっとして何も考えられない;
  18. for(int i=0;i<n;i++){
  19. dp[1][i]=max(dp[1][i],data[i]);
  20. long long int d=data[i];
  21. for(int j=0;j<=i;j++){
  22. if(j<=i-m+1){
  23. dp[1][i+1]=max(dp[1][i+1],dp[1][j]+d);
  24. dp[0][i+m]=max(dp[1][i+m],dp[1][j]+d);
  25. }else{
  26. dp[1][j+m]=max(dp[1][j+m],dp[1][j]+d);
  27. dp[0][i+m]=max(dp[0][i+m],dp[1][j]+d);
  28. }
  29. dp[1][i]=max(dp[1][i],dp[0][j]+d);
  30. dp[1][i+1]=max(dp[1][i+1],dp[0][j]+d);
  31. }
  32.  
  33. for(int j=0;j<2;j++){
  34. dp[j][i+1]=max(dp[j][i+1],dp[j][i]);
  35. }
  36.  
  37. //for(int j=0;j<13;j++){
  38. // cout<<j<<"("<<dp[0][j]<<" "<<dp[1][j]<<")";
  39. //}
  40. //cout<<endl;
  41. }
  42. long long int ans=0;
  43. for(int i=0;i<n*2+4;i++){
  44. for(int j=0;j<2;j++){
  45. ans=max(ans,dp[j][i]);
  46. }
  47. }
  48. cout<<ans<<endl;
  49. return 0;
  50. }
Success #stdin #stdout 0s 5288KB
stdin
19 6
649709806 544965184 989973157 70782669 896694587 677313169 222236787 802852233 648067908 741883552 268031280 444476448 72749402 487205238 8443051 173531301 972083968 185985008 85494770

stdout
5407881354