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. for(int j=max(0,i-m+1);j<i;j++){
  21. dp[0][i+m]=max(dp[0][j+m],dp[1][j]+data[i]);
  22. dp[1][j+m]=max(dp[1][j+m],dp[1][j]+data[i]);
  23. }
  24. for(int j=0;j<i;j++){
  25. if(j<i-m+1){
  26. dp[1][i+1]=max(dp[1][i+1],dp[1][j]+data[i]);
  27. }
  28. dp[0][i+m]=max(dp[0][i+m],dp[0][j]+data[i]);
  29. dp[1][i+1]=max(dp[1][i+1],dp[0][j]+data[i]);
  30. }
  31. for(int j=0;j<2;j++){
  32. dp[j][i+1]=max(dp[j][i+1],dp[j][i]);
  33. }
  34.  
  35. for(int j=0;j<13;j++){
  36. cout<<j<<"("<<dp[0][j]<<" "<<dp[1][j]<<")";
  37. }
  38. cout<<endl;
  39. }
  40. long long int ans=0;
  41. for(int i=0;i<2*n+4;i++){
  42. for(int j=0;j<2;j++){
  43. ans=max(ans,dp[j][i]);
  44. }
  45. }
  46. cout<<ans<<endl;
  47. return 0;
  48. }
Success #stdin #stdout 0.01s 5296KB
stdin
6 3
3 7 1 5 6 4
stdout
0(0 3)1(0 3)2(0 0)3(0 0)4(0 0)5(0 0)6(0 0)7(0 0)8(0 0)9(0 0)10(0 0)11(0 0)12(0 0)
0(0 3)1(0 7)2(0 7)3(0 10)4(10 0)5(0 0)6(0 0)7(0 0)8(0 0)9(0 0)10(0 0)11(0 0)12(0 0)
0(0 3)1(0 7)2(0 7)3(0 10)4(10 8)5(10 0)6(0 0)7(0 0)8(0 0)9(0 0)10(0 0)11(0 0)12(0 0)
0(0 3)1(0 7)2(0 7)3(0 10)4(10 12)5(10 12)6(12 0)7(0 0)8(0 0)9(0 0)10(0 0)11(0 0)12(0 0)
0(0 3)1(0 7)2(0 7)3(0 10)4(10 12)5(10 13)6(12 16)7(16 0)8(0 0)9(0 0)10(0 0)11(0 0)12(0 0)
0(0 3)1(0 7)2(0 7)3(0 10)4(10 12)5(10 13)6(12 16)7(16 16)8(16 0)9(0 0)10(0 0)11(0 0)12(0 0)
16