比賽排名 【組合數】

 

本人水平有限,題解不到爲處,請多多諒解c++

 

本蒟蒻謝謝你們觀看spa

 

 

題目:code

比賽排名blog

(rank.cpp/in/out 1s 128M)it

N個同窗參加比賽,問有多少種排名狀況,容許出現並列的狀況class

Inputim

輸入一個數字NN<=12di

Output比賽

輸出有多少種排名狀況co

Sample Input

2

Sample Output

3

HINT

設兩名同窗爲A,B,則排名狀況有如下三種

1:A第一名,B第二名

2:A第二名,B第一名

3:A,B並列第一名

 

f(i)表示i個同窗參加比賽,問有多少種排名狀況,容許出現並列的狀況

 

 

能夠考慮下第一名的幾我的,能夠有一我的,則結果爲c(n,1)*f(n-1) 由於已經取走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 }
相關文章
相關標籤/搜索