本题是要求最多的鸟的数量,不一定在最后;
所以先把满足题意的能配对的先确定下来;
然后要开始遍历查找最大,在便利是在时间段n中进行的,把这个时间段能配对的鸟的数量,和雄鸟没配对的数量(因为每到飞走的时间)就是这个时间段总时间;
#include"stdio.h"
#include"string.h"
int a[10006],b[10006];
char str[10006];
int main()
{
int m,n,i,j,k,sum,max,h;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&m,&n);
memset(b,0,sizeof(b));
scanf("%s",str);
for(i=0;i<m;i++)
a[i]=str[i]-'0';
for(i=0;i<m;i++)
{
if(a[i]==1)
{
for(j=i+1;j<=i+n&&j<m;j++)
if(a[j]==2&&b[j]==0)
{
b[i]=1;
b[j]=1;
break;
}
}
}
sum=0;max=0;
for(i=0;i<m;i++)
{
h=0;
if(b[i]==1)
sum++;
if(i-n<0)
j=0;
else
j=i-n+1;
for(;j<=i;j++)
{
if(a[j]==1&&b[j]==0)
h++;
}
if(max<h+sum)
max=h+sum;
}
printf("%d\n",max);
}
return 0;
}