p2540鬥地主增強版
參考大佬題解
思路:順子暴力搜,剩下的牌我不會貪心所以用記憶化搜尋(或者dp);
注意:雙王不能當對,二不算順子
**
1 #include 2 #include 3 #include 4 #include 5 #include 6view codeusing
namespace
std;78
#define res register int
9#define inf 0x3f3f3f3f
10 inline int
read()
1617
intn,t,ans;
18int a[20
];19
int f[25][25][25][25
];20
//單個牌的數目,雙,三,四,王
21int c[5
];22
23 template 24 inline t my_max(t a,t b)
25 template 26 inline t my_min(t a,t b)
2728
int calc(int a,int b,int c,int
d)29
45void dfs(int
x)46
64if(!f) continue;65
for(res j=1 ; j<=cnt ; j++)
66 a[i+j-1]-=k;
67 dfs(x+1
);68
for(res j=1 ; j<=cnt ; j++)
69 a[i+j-1]+=k;
70 cnt++;//
看有沒有更長的順子71}
72}73 c[1]=c[2]=c[3]=c[4]=0;74
for(res i=3 ; i<=15 ; i++) c[a[i]]++;
75if(a[0]==2) ans=my_min(ans,x+calc(c[1],c[2],c[3],c[4])+1
);76
//王炸
77 ans=my_min(ans,x+calc(a[0]+c[1],c[2],c[3],c[4
]));78}
7980
intmain()
8196 dfs(0
);97 printf("
%d\n
",ans);98}
99100
return0;
101 }
luogu2540 鬥地主增強版
給你一副手牌,沒有飛機帶翅膀,按鬥地主的規則,求將所有牌打出的最少次數。我們已經知道花色對牌沒有影響,那麼如果不考慮順子,每個牌具體是什麼數字我們也用不著知道,我們關心的只有牌堆中單張 對子 棒子 炸彈 王的個數。因此我們可以用 f k 1,k 2,k 3,k 4,k x 表示當有 k 1 個單張,...
題解 P2668 鬥地主
思路 dfs 簡易剪枝 簡易a 我也不知道算不算a dfs引數記錄層數 按消耗牌多少的貪心順序搜尋 有幾種情況可以不用搜尋 但我還是搜尋了 可以用a 估算出來 最後剩下有單牌,對子,三張牌,4炸彈的時候可以直接算出來 還有乙個剪枝,乙個簡簡單單的剪枝 if x ans return 這個因為省略了很...
P2668 鬥地主 dp 深搜版
牛牛最近迷上了一種叫鬥地主的撲克遊戲。鬥地主是一種使用黑桃 紅心 梅花 方片的a到k加上大小王的共54張牌來進行的撲克牌遊戲。在鬥地主中,牌的大小關係根據牌的數碼表示如下 3 4 5 6 7 8 9 10現在,牛牛只想知道,對於自己的若干組手牌,分別最少需要多少次出牌可以將它們打光。請你幫他解決這個...