分析:确定了第一个翻转的位置后 , 其它位置就全部确定了。所以对于第一个位置 inx = [1,k+1]。 贪心判断就好了。
#include <bits/stdc++.h>
#define sc scanf
#define pr printf
const int N = 110000;
using namespace std;
int n , k;
long long arr[N];
long long func(int idx);
int main()
{
// int n , k;
int i , j;
long long ans = 99999999999999;
sc("%d %d",&n , &k);
for(i=1; i<=n; i++)
sc("%lld",&arr[i]);
for(int i=1; i<=k+1&& i<=n; i++)
{
long long num = func(i);
if(num != -1)
ans = ans > num ? num : ans;
}
pr("%lld\n",ans);
return 0;
}
long long func(int idx)
{
long long sum = 0;
while(idx <= n)
{
sum += arr[idx];
if(idx + k >= n) return sum;
idx = idx + k*2 + 1;
}
if(idx > n) return -1;
return sum;
}