球迷購票問題(累加求排列組合種數 動態規劃)

2021-09-25 19:41:43 字數 1109 閱讀 7005

盛況空前的足球賽即將舉行。球賽門票售票處排起了球迷購票長龍。

按售票處規定,每位購票者限購一張門票,且每張票售價為50元。在排成長龍的球迷中有n個人手持面值50元的錢幣,另有n個人手持面值100元的錢幣。假設售票處在開始售票時沒有零錢。試問這2n個球迷有多少種排隊方式可使售票處不致出現找不出錢的尷尬局面。

例如當n=2是,用a表示手持50元面值的球迷,用b表示手持100元錢的球迷。則最多可以得到以下兩組不同的排隊方式,使售票員不至於找不出錢。

第一種:a a b b

第二種:a b a b

[程式設計任務]

對於給定的n (0≤n≤20),計算2n個球迷有多少種排隊方式,可以使售票處不至於找不出錢。

乙個整數,代表n的值

乙個整數,表示方案數

輸入 #1

2
輸出 #1

2
思路 :

如果把  i 個人已經排好了序,那麼第 i 個人有可能是拿50 元的,也有可能是拿100的

假設前 i 個人有 j 個人是拿50元的,那麼如果第 i 個人是拿50元的,那麼前 i-1 個人拿了j-1個50元,如果第 i 個人拿的是100元,那麼前 i-1個人有  j 個拿的是 50元、

於是我們可得出遞推式: dp[ i ] [ j ] = dp[ i-1 ][ j-1 ]+dp[ i-1 ][ j ]    // dp[ i ][ j ]表示前 i 個人 拿了  j 個50元

#includeusing namespace std;

// dp[i][j] = dp[i-1][j-1] +dp[i-1][j]

int main(),n;

cin>>n;

dp[0][0]=1;

for(int i=1;i<=n+n;i++)

}cout《一維陣列優化:

#includeusing namespace std;

int main(),n;

cin>>n;

dp[0]=1;

for(int i=1;i<=n+n;i++)

}cout

}

排列組合問題

若有一串字母abc,進行全排列,有六種方法,3的階層,321,為什麼是這樣呢,我們根據 看思路 這之間會涉及遞迴,回溯 將abc看成陣列,a 0 a,a 1 b,a 2 c 下文中用a0代替a,a1代替b,a2代替c 排列的過程就是交換位置的過程 1 先對a進行交換 即k 0時 a0和a0自己交換 ...

排列組合問題

基本的排列組合問題,就是高中數學的內容,怎麼用程式語言輸出所有排列呢?我們手寫的過程,它應該是乙個遞迴的過程,而不適合用for wihle迴圈。如果資料結構學的紮實,可以發現這是乙個樹結構,遍歷所有的葉子節點就能夠得到全排列。說到遞迴,應該向大家隆重介紹一下數學歸納法的思想,應為都有乙個問題規模n。...

排列組合問題

這資料寫個暴力都拿不了30分 t t。c n,i c n,i c n,i c n,n i 結合現實意義,在n個裡面選 i 個,再在n個裡面選n i個的方案數。就等價於在前n個中選 i 個,在後n各種選n i個。而且i 0 n 在2 n各種選n個。那麼 c 2 n,n 答案要對1000000007取模...