题解:对于每一个点 i 来讲,从 j = i + r - 1 开始往前找,若是找到一个 a [ j ] 是 1 ,那么就把它选上,可是咱们须要判断交界处,也就是若是前面选的那个能够让这个点变温暖,就不用再选多余的了。这样就记录一下前一个 last ,要知足 j > last。找到以后,就更新 i 的值,在 i + k 之间的均可以由选的这个点来温暖。ios
#include <iostream> #include <bits/stdc++.h> using namespace std; int a[2005]; int main() { int n,r; while(scanf("%d%d",&n,&r) != EOF) { memset(a,0,sizeof(a)); for(int i = 1; i <= n; i ++) { scanf("%d",&a[i]); } int num = 0; int last = 0,j,k; for(int i = 1; i <= n;) { j = i + r - 1; k = 0; while(j > last) { if(a[j]) { k = j; break; } else j --; } if(k == 0) {printf("-1\n");return 0;} else { last = k; num ++; i = r + k; } } printf("%d\n",num); } return 0; }