zoukankan      html  css  js  c++  java
  • 看球的巴士

    题目描述

    两个球队的支持者要一起坐车去看球,他们已经排成了一列。我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的。为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是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
    ",f[N]);
        return 0;
    }
  • 相关阅读:
    使用js给数组去重的3种常用方法
    JS操作DOM元素属性和方法
    打开新窗口并运行代码
    html5 中doctype 格式
    html htm shtml 区别
    RML Utilities for SQL Server工具
    [转载]项目经理和产品经理的区别
    sublime text 3 快捷键大全以及配置编译环境
    CSS的四种引入方式
    软件系统需求分析策划方案
  • 原文地址:https://www.cnblogs.com/LightyaChoo/p/13062123.html
Copyright © 2011-2022 走看看