題解:對於每一個點 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; }