それは理解の多くは、問題の解決策ではない、制限されています
このこんにゃくを見ていただきありがとうございます
トピック:
トーナメントランキング
(rank.cpp /イン/アウト1S 128M)
Nのクラスメートは、平行な状況をできるように、ランキングのどのように多くの種類を尋ね、競争に参加します
入力
番号を入力して N 、N <= 12であります
出力
どのように多くの種類の出力順位の
サンプル入力
2
サンプル出力
3
ヒント
以下のための2つの学生を設定し、A、B 、次の3つのランキングを
1:第一、Bの第二
2:第二、B 第
3:A、Bの最初に平行
F(i)は表して競技に参加するために目の学生を、並列状況をできるように、ランキングのどのように多くの種類を尋ねました
結果として、人が持つことができる、最初の少数の人々の下で考えることができ、C(nは、1)* F (n-1)の人が削除されているので、
あってもよい 2 個体、結果はC(N、2)* F (N-2) が2除去されているので
が存在し得る 3人の次に結果は、個人C(N、3)* F (N-3) が3削除されたため
......
あなたが持つことができる n個の個人、そして結果は、C(nは、n個)* fを (0)が削除されたnアル
ANSは上記事情の和に等しいです。
code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 long long a[210]; 4 long long C(long long m,long long n)//C (m中取n) 5 { 6 long long ans=1; 7 for(long long i=1;i<=n;i++) 8 ans=ans*(m-i+1)/i; 9 return ans; 10 } 11 signed main() 12 { 13 long long n,t; 14 scanf("%lld",&n); 15 a[1]=a[0]=1; 16 for(long long k=2;k<=n;k++) 17 { 18 for(long long i=1;i<=k;i++) 19 { 20 a[k]+=a[k-i]*C(k,i); 21 } 22 } 23 printf("%lld\n",a[n]); 24 return 0; 25 }