首先不難想到,至少要記錄四個狀態:「有4種顏色的牌的面值個數」「有3種顏色的牌的面值個數」……
然後嘗試再記錄乙個狀態:當前狀態動的那個牌的面值的顏色數。但這樣會導致邊界條件特判過於麻煩。
考慮進行如下容斥:
當動有1種顏色的牌時,顯然 $ add = c1 * f(c4,c3,c2,c1-1) $ 。
當動有2種顏色的牌時,顯然 $ add += 2 * c2 * dp(c4,c3,c2-1,c1+1) $ ,但我們要考慮減去連出2次相同面值的牌的行為,即 $ add -= 2 * c2 * dp(c4,c3,c2-1,c1) $
當動有3種顏色的牌時,顯然要加上至少連出1次同樣面值的牌的行為,但由於後面2~3位已保證不會重複,多減去了,所以還要加回來。通4種顏色的情況一樣,容斥即可。
#include#include#includeusing namespace std;
typedef unsigned long long ull;
int t,kase,n,h1[128],cnt1[14],cnt2[5];
ull f[14][14][14][14];
ull dp(int c4,int c3,int c2,int c1)
int main()
fu(i,1,4) cnt2[i]=0;
fu(i,1,13) cnt2[cnt1[i]]++;
printf("case #%d: %llu\n",++kase,dp(cnt2[4],cnt2[3],cnt2[2],cnt2[1]));
} return 0;
}
TYVJ 2002 撲克牌 題解
p2002撲克牌 admin生日那天,rainbow來找admin玩撲克牌 玩著玩著rainbow覺得太沒意思了,於是決定給admin乙個考驗 rainbow把一副撲克牌 54張 隨機洗開,倒扣著放成一摞。然後admin從上往下依次翻開每張牌,每翻開一張黑桃 紅桃 梅花或者方塊,就把它放到對應花色的...
TYVJ 2002 撲克牌 題解
p2002撲克牌 admin生日那天,rainbow來找admin玩撲克牌 玩著玩著rainbow覺得太沒意思了,於是決定給admin乙個考驗 rainbow把一副撲克牌 54張 隨機洗開,倒扣著放成一摞。然後admin從上往下依次翻開每張牌,每翻開一張黑桃 紅桃 梅花或者方塊,就把它放到對應花色的...
牛客題霸 撲克牌順子 C 題解 答案
管理博文 牛客題霸 撲克牌順子 c 題解 答案 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my go...