HDU 4155 博弈 記憶化搜尋

2021-07-24 10:19:30 字數 1026 閱讀 5211

題意:有1,2,3,4,5,6各四張牌,ab輪流出牌,誰先使得總和超過31就輸.告訴你已經出牌的序列,求最優策略下誰贏.

經典的博弈題了.先把遊戲結束的狀態挖出來,然後記憶化搜尋一遍即可.

#include 

#define clear(x,y) memset (x,y,sizeof(x))

#define for(a,b,c) for (int a = b; a <= c; a++)

#define rep(a,b,c) for (int a = b; a >= c; a--)

#define fi first

#define se second

#define pii pair

#define pli pair

#define pb push_back

#define mod 1000000007

using namespace std;

#define maxn 1005

int dp[5][5][5][5][5][5];//6張牌的狀態

void dfs (int x, int y, int z, int a, int b, int c)

if (y < 4)

if (z < 4)

if (a < 4)

if (b < 4)

if (c < 4)

if (num%2 == 0)

else

}int main () }}

dfs (0, 0, 0, 0, 0, 0);

int tmp[7];

char s[233];

while (cin >> s)

int ans = dp[tmp[1]][tmp[2]][tmp[3]][tmp[4]][tmp[5]][tmp[6]];

printf ("%s %s\n", s, ans ? "a" : "b");

}return

0;}

hdu3779 記憶化搜尋

兩列火車入站,重新排列的車廂符不符合要求 記憶化搜尋,ans i j 記錄的是第一列火車的第i節和第二列火車的第j列在組合後的序列裡找不找的到 如果找的到就標記為1,因為是從前到後搜尋,所以在ans n m 1時,表示符合 include include includeusing namespace...

hdu2452 記憶化搜尋

一顆樹,邊是單向的,每個節點有一定的權值,要你從根節點走到葉子節點,走到第偶數節點時,使後面的權值和最小 走到第奇數節點時,使後面的權值和最大 邊鍊錶儲存,並查集查詢根節點 用val i 0 表示第i個節點是偶數節點的值和val i 1 表示第i個節點是奇數節點的值 遞迴的計算,因為節點很多,所以要...

hdu1069 記憶化搜尋

此題思路還是比較清晰的,對於每個x,y,z,都會有三種情況,dp i 表示把第i個放在最下面得到的最大高度,狀態轉移方程為dp i max dp i dp j height 這裡的j要滿足能夠放在i上面,height為第i個矩形的高度 如下 include include include inclu...