记录编号 309498 评测结果 AAAAAAAAAA
题目名称 看球的巴士 最终得分 100
用户昵称 GravatarMagic_Sheep 是否通过 通过
代码语言 C++ 运行时间 0.078 s
提交时间 2016-09-19 20:55:22 内存使用 0.36 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=4000;
int f[maxn],a[maxn],b[maxn],n,m;
char h[2];
int main()
{
    freopen("iinput.in","r",stdin);
    freopen("iinput.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",h);
        if(h[0]=='H') a[i]=1;else a[i]=2;
        if(a[i]==2) a[i]=0,b[i]=1;
        else b[i]=0;

    }
    memset(f,0x3f,sizeof(f));
    f[0]=0;f[1]=1;
    for(int i=1;i<=n;i++) a[i]+=a[i-1],b[i]+=b[i-1];
    for(int i=1;i<=n;i++)
    {
        int ans=10100107;
        for(int j=1;j<=i;j++)
        {
            int x=a[i]-a[j-1],y=b[i]-b[j-1];
			if(x==0||y==0||abs(x-y)<=m)
			{
                ans=min(ans,f[j-1]+1);
			}
        }
        f[i]=ans;
    }
    printf("%d",f[n]);
    return 0;
}