HDU 4778 記憶化搜尋 狀壓

2021-06-26 21:48:09 字數 786 閱讀 2439

給出g種寶石,b個包,和s,s代表到時候每種顏色的寶石湊齊s個能變成乙個魔法石

每個包裡有n種寶石,分別為c1,c2.......

然後兩人輪流拿包,每個包只能拿一次,拿出包把寶石放地上。

如果能變成魔法石則拿走魔法石,下一次還這個人拿包,沒變成則換人。

魔法石的個數就是獲得分數,問兩人最優的時候分差是多少。

狀壓記憶化搜尋

一共21個包,狀壓存當前取包的狀態

無論怎樣取,最後獲得的魔法石數量一定

dp[i]表示在i狀態下,先手可以獲得的最高分數

#include "stdio.h"

#include "string.h"

int aim,g,b,s;

int dp[1<<22],c[25][10];

int bit[25];

int inf=0x3f3f3f3f;

int max(int a,int b)

return dp[cur]=ans;

}int main()

}sum=0;

for (i=1;i<=g;i++)

sum+=all[i]/s;

aim=bit[b+1]-1;

memset(mark,0,sizeof(mark));

memset(dp,inf,sizeof(dp));

ans=dfs(0,0,mark);

printf("%d\n",ans-(sum-ans));

}return 0;

}

hdu4778 狀壓dp 博弈

題目大意 有g種不同顏色的小球,b個袋子,每個袋子裡面有若干個每種小球 兩人輪流取袋子,當袋子裡面的同色小球有s個時,會合併成乙個魔法球,並被此次取袋子的人獲得 成功獲得魔法球的人可以再次取 求二者都進行最優策略之後兩人所得魔法球個數差 分析 博弈,資料很小,自然想到了可以搜尋所有狀態 然後從每一步...

UVa 10817 狀壓 記憶化搜尋

描述 m個教師,n個求職者,s門課程.每門課程至少需要2個老師教,問符合要求的最小值 分析 首先定義狀態 對於每乙個老師只有教或者不叫兩種決策,而方程想要轉移,很容易看出需要知道此時老師教授的情況.故 定義 f i s1 s2 i表示依考慮到前i個老師 s1為乙個老師教的集合 s2為兩個老師教的集合...

POJ 2817 狀壓DP 記憶化搜尋

這個題的意思是第一行給出case數n 1 n 10 然後給出n個單詞,每個一行,當輸入不是正整數的時候結束。每個單詞最多10個字母。要求的是,按任意順序排列這些單詞,可以在單詞前面加任意個空格,使得相鄰的單詞上下對應的字母數目最多,並輸出最多是多少。先預處理出每兩個單詞相連所能對應的字母數最多的情況...