思路:dfs+簡易剪枝+簡易a(我也不知道算不算a);
dfs引數記錄層數
按消耗牌多少的貪心順序搜尋
有幾種情況可以不用搜尋(但我還是搜尋了)
可以用a*估算出來
最後剩下有單牌,對子,三張牌,4炸彈的時候可以直接算出來;
還有乙個剪枝,乙個簡簡單單的剪枝(if(x>=ans) return;);
這個因為省略了很多情況所以並不很慢;
反正我是過了;
#include#includeview code#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;
}
洛谷 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現在,牛牛只想知道,對於自己的若干組手牌,分別最少需要多少次出牌可以將它們打光。請你幫他解決這個...