zoukankan      html  css  js  c++  java
  • UVALive 4123 Glenbow Museum (组合数学)

    转载请注明出处: http://www.cnblogs.com/fraud/           ——by fraud

    易得,当n为奇数或者n<3时,答案为0,否则该序列中必定有(n+4)/2个R,(n-4)/2个O;

    要使该序列的排列能成立,则只需要保证(在首尾相连之后)该序列中依旧不存在相连的两个O即可;

    从而可以得出当n为大于等于4的偶数时,答案等于C(n/2+1,3)+2*C(n/2+1,4);

    当然,大白书还有介绍dp的方法。

     1 #include <iostream>
     2 using namespace std;
     3 typedef long long ll;
     4 ll C[1010][5];
     5 ll ans[1010];
     6 int main()
     7 {
     8     ios::sync_with_stdio(false);
     9     C[0][0]=1;
    10     for(int i=1;i<1010;i++)
    11     {
    12         C[i][0]=1;
    13         for(int j=1;j<5;j++)
    14         {
    15             C[i][j]=C[i-1][j-1]+C[i-1][j];
    16         }
    17     }
    18     for(int i=4;i<1010;i++)
    19     {
    20         if(i&1)continue;
    21         else ans[i]=2*C[i/2+1][4]+C[i/2+1][3];
    22     }
    23     int n,cas=1;
    24     while(cin>>n&&n)
    25     {
    26         cout<<"Case "<<cas++<<": "<<ans[n]<<endl;
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    python 文件 笔记
    python 模块、包 笔记
    类、对象
    python 函数 笔记
    测试价值体现
    断舍离-笔记2
    Happy 2006 POJ
    Triangle War POJ
    Complete the sequence! POJ
    放苹果 POJ
  • 原文地址:https://www.cnblogs.com/fraud/p/4099434.html
Copyright © 2011-2022 走看看