zoukankan      html  css  js  c++  java
  • HDU-1297-Children’s Queue

    Children’s Queue

    这道题是排序问题,可以用递归方法解决。

    计算F(n):

    一:当最后一个是男孩M时候,前面n-1个随便排出来,只要符合规则就可以,即是F(n-1);

    二:当最后一个是女孩F时候,第n-1个肯定是女孩F,这时候又有两种情况:

            1)前面n-2个可以按n-2个的时候的规则来,完全可以,即是F(n-2);

            2)但是即使前面n-2个人不是合法的队列,加上两个女生也有可能是合法的。当第n-2是女孩而n-3是男孩的情况,可能合法,情况总数为F(n-4);

    综上所述:总数F(n)=F(n-1)+F(n-2)+F(n-4);并且,F(0)=1,F(1)=1,F(2)=2,F(3)=4。

     1 #include<iostream>
     2 #include<string> 
     3 using namespace std;
     4 string add(string s1,string s2)
     5 {
     6     
     7     int j,l,la,lb;
     8     string max,min;
     9     max=s1;min=s2;
    10     if(s1.length()<s2.length()) {max=s2;min=s1;}
    11     la=max.size();lb=min.size();
    12     l=la-1;
    13     for(j=lb-1;j>=0;j--,l--) max[l] += min[j]-'0'; 
    14     for(j=la-1;j>=1;j--) if(max[j]>'9'){max[j]-=10;max[j-1]++;}
    15     if(max[0]>'9') {max[0]-=10;max='1'+max;}
    16     return max;
    17 }
    18 int main(){
    19     int n,i;
    20     string a[1001];
    21     a[0]="1";
    22     a[1]="1";
    23     a[2]="2";
    24     a[3]="4";
    25     for(i=4;i<1001;++i)
    26        a[i]=add(add(a[i-1],a[i-2]),a[i-4]);
    27      while(scanf("%d",&n)!=EOF)
    28         cout<<a[n]<<endl;
    29     return 0;      
    30 }
    注:转载请注明出处
  • 相关阅读:
    P1312 [NOIP2011 提高组] Mayan 游戏
    Codeforces Round 736
    CF487E Tourists
    荏苒
    数论
    [NOI2009] 二叉查找树 题解
    元素
    线性基
    杂录
    SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
  • 原文地址:https://www.cnblogs.com/1625--H/p/9356319.html
Copyright © 2011-2022 走看看