比赛 20111108 评测结果 AAAATTTTTT
题目名称 机房 最终得分 40
用户昵称 QhelDIV 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-08 11:05:52
显示代码纯文本
#include<fstream>
using namespace std;
ifstream   fin("orz.in");
ofstream fout("orz.out");
int f[2502][2502],map[2502],n,limit,Ti,Min=2100000000;

void init()
{
int i;	
	fin>>n>>limit;
	for(i=1;i<=n;i++)
		fin>>map[i];	
	Min=n;
}
int Abs(int O)
{
	return (O>0?O:0-O);
}
void make()
{
int i,j,M,J,Y;
	for(i=1;i<=n;i++)
	{
		M=0;J=0;Y=0;
		for(j=i;j<=n;j++)
		{
			if(map[j]==1)
				J++;
			if(map[j]==2)
				Y++;
			M=Abs(J-Y);
			f[i][j]=M;
			if(j-i+1==M)
				f[i][j]=0-M;
		}
	}
}

void find(int pos)
{
int i;
	for(i=pos;i<=n;i++)
		if(f[pos][i]<=limit && Ti+1<=Min)
		{
			Ti++;
			find(i+1);
			Ti--;
		}
	if(pos-1==n)
		if(Ti<Min)
			Min=Ti;
}

int main()
{
	init();
	make();
	find(1);
	fout<<Min;
	fin.close();
	fout.close();
	return 0;
}