盛況空前的足球賽即將舉行。球賽門票售票處排起了球迷購票長龍。
按售票處規定,每位購票者限購一張門票,且每張票售價為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
必開qword
測試:n=15
回溯:1秒(超時)
模擬棧:大於10分鐘
遞迴演算法:1秒(超時)
動態規劃:0 ms
組合演算法:16 ms
思路:一:卡特蘭數
#include#include#include
#include
using
namespace
std;
intn;
long
long f[10000
];int
main()
二:動態規劃。f[i][j]表示已經收了i個人的錢,現在手裡有j張50的。
那 當現在收的人的錢是50元時 f[i][j]+=f[i-1][j-1]。因為多一張50的,所以現在50元比起原來就多了一張。
當現在收的人的錢是100元時 f[i][j]+=f[i-1][j+1
]。因為要找一張50的,所以比起原來就少了一張50的。
#include#include#include
#include
using
namespace
std;
intn;
int f[42][42
];int
main()
cout
<2*n][0
];}
洛谷P1754 球迷購票問題 題解
卡特蘭數經典 texttt 分拆問題。分析 題意相當於排列 n 個 texttt a 和 n 個 texttt b 使得相鄰 texttt 有序!消掉,然後左右元素並到一起再消,最後消完的序列個數。設 texttt 為乙個組 1 texttt 自巢狀一次為乙個組 2 即 texttt 以此類推。後面...
P1754 球迷購票問題
原題鏈結 乙個長度為 2n 的括號序列由 n 個左括號和 n 個右括號組成,問有多少種合法方案 顯然對於任意時刻,要是能找開 b,那麼之前一定有乙個 a 給他提供了一張 50 的 money,如果將 a 看做是乙個左括號,將 b 看做是乙個右括號,那麼這道題就轉化成了 求合法括號序列的方案數 相信對...
P1754球迷購票問題
這是一道動態規劃題,其實也是個數論題。有n人拿50,有n人拿100買票,必須讓50元的人買,不然無法找零錢,問最多有幾種方案可以每一次都買票成功。這個題首先令人想到搜尋,但是隨即發現dp是正解,於是dp i j 代表當50為i,100為j人時 最大的方案數,於是去推導方程,得到dp i j dp i...