程式設計之美初賽第二場 撲克牌(四維dp,難)

2021-07-02 04:17:52 字數 835 閱讀 4193

一副不含王的撲克牌由52張牌組成,由紅桃、黑桃、梅花、方塊4組牌組成,每組13張不同的面值。現在給定52張牌中的若干張,請計算將它們排成一列,相鄰的牌面值不同的方案數。

牌的表示方法為xy,其中x為面值,為2、3、4、5、6、7、8、9、t、j、q、k、a中的乙個。y為花色,為s、h、d、c中的乙個。如2s、2h、td等。

第一行為乙個整數t,為資料組數。

之後每組資料佔一行。這一行首先包含乙個整數n,表示給定的牌的張數,接下來n個由空格分隔的字串,每個字串長度為2,表示一張牌。每組資料中的撲克牌各不相同。

對於每組資料輸出一行,形如"case #x: y"。x為資料組數,從1開始。y為可能的方案數,由於答案可能很大,請輸出模264之後的值。

1 ≤ t ≤ 20000

小資料1 ≤ n ≤ 5

大資料1 ≤ n ≤ 52

樣例輸入

5

1 tc

2 tc ts

5 2c ad ac jc jh

4 ac kc qc jc

6 ac ad as jc jd kd

樣例輸出

case #1: 1

case #2: 0

case #3: 48

case #4: 24

case #5: 120

我當時的想法是三維dp[i][j][k],表示第i位牌面是j,到目前j已經出現了k次。還是太笨,沒有想到牌數的限制。同乙個牌面最多隻出現4張。

大神做法:四維dp。dp[a][b][c][d]表示用a個只出現1次的、b個出現2次的、c個出現3次的和d個出現4次的能夠放置的方法數。

程式設計之美初賽第二場

problem a 一邊輸入邊一邊維護殘留網路,然後跑isap。小資料過了,大資料tle。據說可以bfs預處理 層次網路。可以過。view code include include include include using namespace std const int inf 10000000 ...

2014程式設計之美初賽第二場

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 大神同學是乙個熱愛數字的孩子,她無時無刻不在思考生活與數學的聯絡。有一天,她發現其實公曆的設計是有講究的。每4年就會多閏一天,每一百年又會有一年不是閏年,而第四百年又是閏年。這樣,這四百年的週期裡每一年平均有365又400分之9...

程式設計之美初賽第二場 集合

時間限制 12000ms 單點時限 6000ms 記憶體限制 256mb 統計滿足下列條件的集合對 a,b 的數量 因為答案可能很大,你只需要求出它除以m的餘數。第一行乙個整數t 1 t 10 表示資料組數。接下來是t組輸入資料,測試資料之間沒有空行。每組資料格式如下 僅一行,2個整數n和m 1 m...