題解 P2668 鬥地主

2022-05-01 04:09:06 字數 1373 閱讀 8598

思路:dfs+簡易剪枝+簡易a(我也不知道算不算a);

dfs引數記錄層數

按消耗牌多少的貪心順序搜尋

有幾種情況可以不用搜尋(但我還是搜尋了)

可以用a*估算出來

最後剩下有單牌,對子,三張牌,4炸彈的時候可以直接算出來;

還有乙個剪枝,乙個簡簡單單的剪枝(if(x>=ans) return;);

這個因為省略了很多情況所以並不很慢;

反正我是過了;

#include#include

#include

using

namespace

std;

int n,jk,kl,ai,bi,hand[20],ans=0x7fffffff

;int t,c[10

];int

a_star()

void dfs(int

x) }

hand[j]+=2

; }

}hand[i]+=4

; }

}for(int i=1; i<=13; i++)

}hand[j]+=1

; }

}hand[i]+=4

; }

}for(int i=1; i<=11; i++)

for(int j=cur; j>=2; j--) }}

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

for(int j=cur; j>=3; j--) }}

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

for(int j=cur; j>=5; j--) }}

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

}hand[i]+=3

; }

}for(int i=1; i<=13; i++)

}hand[i]+=3

; }

}if(hand[14]>=1&&hand[15]>=1

) jk=a_star();

if(x+jk>=ans) return

;

else ans=x+jk;

}int

main()

else

}//for(int i=1;i<=15;i++) printf("%d ",hand[i]);

//printf("\n");

dfs(0

); printf(

"%d\n

",ans);

}return0;

}

view code

洛谷 P2668 鬥地主

牛牛最近迷上了一種叫鬥地主的撲克遊戲。鬥地主是一種使用黑桃 紅心 梅花 方片的a到k加上大小王的共54張牌來進行的撲克牌遊戲。在鬥地主中,牌的大小關係根據牌的數碼表示如下 3 4 5 6 7 8 9 10現在,牛牛只想知道,對於自己的若干組手牌,分別最少需要多少次出牌可以將它們打光。請你幫他解決這個...

洛谷P2668 鬥地主

牛牛最近迷上了一種叫鬥地主的撲克遊戲。鬥地主是一種使用黑桃 紅心 梅花 方片的 a 到 k 加上大小王的共 54 張牌來進行的撲克牌遊戲。在鬥地主中,牌的大小關 系根據牌的數碼表示如下 3 4 5 6 7 8 9 10,而花色並不對牌的大小產生影響。每一局遊戲中,一副手牌由 n 張牌組成。遊戲者每次...

P2668 鬥地主 貪心 深搜

牛牛最近迷上了一種叫鬥地主的撲克遊戲。鬥地主是一種使用黑桃 紅心 梅花 方片的a到k加上大小王的共54張牌來進行的撲克牌遊戲。在鬥地主中,牌的大小關係根據牌的數碼表示如下 3 4 5 6 7 8 9 10現在,牛牛只想知道,對於自己的若干組手牌,分別最少需要多少次出牌可以將它們打光。請你幫他解決這個...