记录编号 163291 评测结果 AAAAAAAAAA
题目名称 看球的巴士 最终得分 100
用户昵称 GravatarOI88 是否通过 通过
代码语言 C++ 运行时间 0.031 s
提交时间 2015-05-23 20:04:13 内存使用 0.35 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#define min(a,b) (a)<(b)?(a):(b)
#define INF 0x3fffffff
#define abs(x) ((x)>0?(x):(-(x)))
using namespace std;
int n,d,j,h,f[2502],q[2502],jsimilar[2502],hsimilar[2502];
int main()
{
	ios::sync_with_stdio(false);
	freopen("iinput.in","r",stdin);
	freopen("iinput.out","w",stdout);
	cin>>n>>d; 					//readin
	for(int i=1;i<=n;i++)
	{
		char x;
		cin>>x;
		if(x=='H')
		{
			q[i]=1;
			h++;
		}
		else
		{
			q[i]=2;       //symbolize
			j++;
		}
		jsimilar[i]=j;    //jsimilar(第i个位置j相同的数目)
		hsimilar[i]=h;   //hsimilar(第i个位置h相同的数目)
		f[i]=INF;		//初始化
	}
	f[1]=1;
	f[0]=0;				//初始化
	for(int i=1;i<=n;i++)
	{
		for(int o=1;o<=i-1;o++)
			if(jsimilar[i]-jsimilar[o-1]==0  ||  hsimilar[i]-hsimilar[o-1]==0  ||  abs(jsimilar[i]-jsimilar[o-1]-hsimilar[i]+hsimilar[o-1])<=d )
				f[i]=min(f[i],f[o-1]+1);//因为有可能一辆车都是一队人
		f[i]=min(f[i-1]+1,f[i]);		//巴士的辆数更新
	}
	cout<<f[n];
}