//f[i][j]就是第is时wpgwhpg的疲劳度是j,那么我们就可以就ta这1s是否休息进行讨论 #include<bits/stdc++.h> using namespace std; const int M = 11000; int n,m; int a[M],f[M][510]; int main() { cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) for(int j=m;j>=0;j--) { if(i+j<=n)//判断越界,不能在n秒内恢复为0 f[i+j][0]=max(f[i+j][0],f[i-1][j+1]);//这里是指恢复体力,不走路所以距离不变,恢复后所走的 路是之前所走的距离 if(j==0) f[i][j]=max(f[i][j],f[i-1][0]);//这里是指疲劳度为0的时候,他休息的情况可能是上一秒在休息,这一秒也在休息 else f[i][j]=max(f[i][j],f[i-1][j-1]+a[i]);//如果选择走的话,疲劳度增加1点,第is所走的距离就应该是上f[上1秒][每1秒的疲劳度]+这1s能走的距离 } cout<<f[n][0]<<endl; return 0; } /* 5 3 5 3 5 2 8 10*/