比赛 20111108 评测结果 AAAAAAAAAW
题目名称 机房 最终得分 90
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-08 10:45:09
显示代码纯文本
#include <fstream>
#include <climits>

#define I_F "orz.in"
#define O_F "orz.out"

const int MAXn=2500+1;

int n,m;
int s[MAXn]={0};
int ans;

void Input();
inline int Abs(const int);
void Dynap();
void Output();

int main()
{
	Input();
	Dynap();
	Output();
	return 0;
}

void Input()
{
	int tn,t1,t2,t=1;
	std::ifstream fin(I_F);
	fin>>tn>>m>>t1;
	s[1]=1;
	n=1;
	for (int i=1; i<tn; i++)
	{
		fin>>t2;
		if (t2!=t1)
		{
			t*=-1;
			n++;
			t1=t2;
		}
		s[n]+=t;
	}
	fin.close();
	
	for (int i=1; i<=n; i++)
		s[i]+=s[i-1];
}

inline int Abs(const int x)
{
	return (x<0)?-x:x;
}

void Dynap()
{
	int f[MAXn];
	for (int i=1; i<=n; f[i++]=INT_MAX-5);
	f[0]=0;
	
	for (int i=1; i<=n; i++)
		for (int j=i-1; (j>=0); j--)
			f[i]=(((j==i-1)?0:Abs(s[i]-s[j]))<=m)?((f[i]<(f[j]+1))?f[i]:(f[j]+1)):f[i];
	ans=f[n];
}

void Output()
{
	std::ofstream fout(O_F);
	fout<<ans<<std::endl;
	fout.close();
}