题目:
题解:
f[i]表示前i个同学最少需要几个机房,用前缀和搞一下呗
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int aa[2505],bb[2505],f[2505];
int main()
{
int n,m,i,j,c;
scanf("%d%d",&n,&m);
memset(f,0x7f,sizeof(f));
memset(aa,0,sizeof(aa));
memset(bb,0,sizeof(bb));
for (i=1;i<=n;i++)
{
scanf("%d",&c);
aa[i]+=aa[i-1];
bb[i]+=bb[i-1];
if (c==1) aa[i]++;else bb[i]++;
}
f[0]=0;
for (i=1;i<=n;i++)
for (j=1;j<=i;j++)
{
int d=aa[i]-aa[j-1],e=bb[i]-bb[j-1];
if (d==0 || e==0 || abs(d-e)<=m)
f[i]=min(f[i],f[j-1]+1);
}
printf("%d",f[n]);
}