1. 程式人生 > >codeforces 1066 B heater

codeforces 1066 B heater

菜雞隻配做水題

思路就很簡單嘛:肯定擴充套件的越靠後邊越好了

 0 0 1 0 1 1 0 0 

假設範圍是3 ,第一個1一定要選上,第2、3個肯定選3啦,越靠後邊就一定能節省更多的點,沒看出來和子問題有什麼聯絡,基本上就是貪心

#include <bits/stdc++.h>
#define ll long long
#define mp make_pair
#define x first
#define y second
using namespace std;
const int maxn = 1005;
int a[maxn];
vector<int
> q; int main() { //freopen("in.txt","r",stdin); int n,k; scanf("%d %d",&n,&k); int cnt = 0; q.push_back(0); for(int i = 1; i <= n; ++i) { scanf("%d",a+i); if(a[i] == 1){ q.push_back(i); cnt ++; } } int cn = 0
; int pos = 0; int ans = 0; while(cn < n) { int i; for(i = pos + 1; i < q.size(); ++i) { if(cn < q[i]-(k-1)-1) break; } if(i == pos + 1) { cout << -1 << endl; return
0; } pos = i-1; cn = q[pos]+(k-1); ans ++; } cout << ans << endl; }