題意:有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...