看他数据2500,想着可以n^2来做,就干脆对于每个点,扫一遍过去看看能把后面多少个人(设从第 ii 个到第 jj 个)分配到一个机房,下一轮搜索就直接从 j+1j+1 搜起,每一段搜完就 ans+=1ans+=1 ,不知道为什么只有70分...
贴代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2550;
int a[maxn];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int nxt,ans=0;
for(int i=1;i<=n;i=nxt){
int cnt1=0,cnt2=0;
for(int j=i;j<=n;j++){
if(a[j]==1)cnt1++;
else cnt2++;
if(abs(cnt2-cnt1)<=m||(cnt2==0||cnt1==0)){
nxt=j+1;
}
}
ans++;
}
cout<<ans<<endl;
return 0;
}