zoukankan      html  css  js  c++  java
  • HDU1297 Children’s Queue (高精度+递推)

    Children’s Queue

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 13333    Accepted Submission(s): 4364


    Problem Description
    There are many students in PHT School. One day, the headmaster whose name is PigHeader wanted all students stand in a line. He prescribed that girl can not be in single. In other words, either no girl in the queue or more than one girl stands side by side. The case n=4 (n is the number of children) is like
    FFFF, FFFM, MFFF, FFMM, MFFM, MMFF, MMMM
    Here F stands for a girl and M stands for a boy. The total number of queue satisfied the headmaster’s needs is 7. Can you make a program to find the total number of queue with n children?
     
    Input
    There are multiple cases in this problem and ended by the EOF. In each case, there is only one integer n means the number of children (1<=n<=1000)
     
    Output
    For each test case, there is only one integer means the number of queue satisfied the headmaster’s needs.
     
    Sample Input
    1 2 3
     
    Sample Output
    1 2 4
     
    Author
    SmallBeer (CML)
     
    Source
     
    Recommend
    lcy   |   We have carefully selected several similar problems for you:  2044 2045 2050 2046 1290 

    题意:

    F代表女孩,M代表男孩,女孩不能单独出现但是可以不出现,即不能出现MFM这种情况,给定一个数n,问有多少种站队方式。高精度递推。

    题解:

    a[i-1]:合法+男
    a[i-2}:合法+女女
    a[i-4}:合法+男女(即不合法)+女女


    这是三种没有互相交叉的不同情况!

    解释:

    设:a(n)表示n个人的合法队列,则:

    按照最后一个人的性别分析,他要么是男,要么是女,
    所以可以分两大类讨论:

    1、如果n个人的合法队列的最后一个人是男,
    则前面n-1个人组成的队列只要是合法的队列即可,
    最后一个男生只 需要站在最后即可,所以,这种情况一共有a(n-1);

    2、如果n个人的合法队列的最后一个人是女,
    则要求队列的第n-1个人务必也是女生,这就是说,
    限定了最后两个人必须都是女生才能是合法的,这又可以分两种情况:

    2.1、如果队列的前n-2个人是合法的队列,
    则显然后面再加两个女生,也一定是合法的,这种情况有a(n-2);
    2.2、但是,即使前面n-2个人不是合法的队列,加上两个女生也有可能是合法的,
    当然,这种长度为n-2的不合法 队列,不合法的地方必须是尾巴,
    就是说,这里说的长度是n-2的不合法串的形式必须是a(n-4)+男+女,
    这种情况一共有a(n-4).

    注意到本题的难点,就是第三种情况,可能前n - 2位以女孩为末尾的不合法队列(即单纯以1位女孩结尾),

    也可以追加2位女孩成为合法队列,而这种n - 2不合法队列必然是由n - 4合法队列+1男孩+1女孩的结构,
    即情况数为a[n - 4]。

    得出递推公式如下:
    a[i]=a[i-1]+a[i-2]+a[i-4];


    若感觉本题较难,可先查看文章:[ACM_HDU_2045]LELE的RPG难题,思路与本题类似,但较为简单。

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    using namespace std;
    long long  a[10005][110]={0};
    int main()
    {
        int i,j,n;
        a[1][0]=1;
        a[2][0]=2;
        a[3][0]=4;
        a[4][0]=7;
        a[5][0]=12;
        for(i=6;i<=1000;i++)
        {
            for(j=0;j<=105;j++)
            {
                a[i][j]+=a[i-1][j]+a[i-2][j]+a[i-4][j];
                a[i][j+1]+=a[i][j]/100000000;
                a[i][j]%=100000000;
            }
        }
        while(cin>>n)
        {
            for(j=105;j>=0;j--)
            if(a[n][j]!=0)
            break;
            cout<<a[n][j];
            for(j=j-1;j>=0;j--)
            printf("%08d",a[n][j]);
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/Ritchie/p/5425339.html
Copyright © 2011-2022 走看看