f( i ) = max( f ( i + 1 ),f ( i + d + 1) + a ( i ));
最后答案即为 f ( 1 ),时间复杂度 O(n)。
代码如下;
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
long long n,d,m,manx=0,a[N],f[N];
int main()
{
cin>>n>>d>>m;
for(long int i = 1 ; i <= n ; i++) cin>>a[i];
for(int i = n ;i >= 1 ; i--)
{
if( a[i] <= m ) f[i] = f[i+1] + a[i];
else f[i] = max(f[i+d+1]+a[i],f[i+1]);
}
cout<< f[1];
}