給出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個字母。要求的是,按任意順序排列這些單詞,可以在單詞前面加任意個空格,使得相鄰的單詞上下對應的字母數目最多,並輸出最多是多少。先預處理出每兩個單詞相連所能對應的字母數最多的情況...