码迷,mamicode.com
首页 > 其他好文 > 详细

看球的巴士

时间:2020-06-07 21:22:28      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:++   set   空格   har   overflow   over   code   pos   bsp   

题目描述

两个球队的支持者要一起坐车去看球,他们已经排成了一列。我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的。为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是D。有一个例外,就是一辆车上的人全部都是一个球队的支持者。问要将这N个人全部送至球场,至少要几辆巴士。

输入格式

第一行是整数N和D,1<=N<=2500,1<=D<=N。

接下来的N行,按排队的顺序,描述每个人支持的球队,用H或J表示。

输出格式

至少要几辆巴士。

样例

样例输入

14 3
H
J
H
H
H
J
H
J
H
H
H
H
H
H

样例输出

2


我们让f[i]表示到第i个人所需的最小的巴士数,在第i个人时,我们向前遍历到j,同时记录两队的人数,若满足条件,则f[i]=f[j-1]+1
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
const int n=3000;
int N,D;
char a[n];
int f[n];
int a1,a2;


int main(){
    scanf("%d%d",&N,&D);
    //memset(f,0x3fffff,sizeof(f));
    for(int i=1;i<=N;i++){
        scanf(" %c",&a[i]);//在这里一定要注意前面有空格,我当时就错了,搞了半天还是对博客看出来的!!!
        f[i]=0x7fffff;
    }
    f[0]=0;
    for(int i=1;i<=N;i++){
        for(int j=i;j>=1;j--){
            if(a[j]==H)a1++;
            if(a[j]==J)a2++;
            if(a1==0||a2==0||abs(a1-a2)<=D){
                f[i]=min(f[i],f[j-1]+1);
            }
            
        }
        a1=0;a2=0;
    }
    printf("%d\n",f[N]);
    return 0;
}

 

看球的巴士

标签:++   set   空格   har   overflow   over   code   pos   bsp   

原文地址:https://www.cnblogs.com/LightyaChoo/p/13062123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!