UVa 10817 狀壓 記憶化搜尋

2021-07-31 20:28:09 字數 1012 閱讀 4545

描述:

m個教師,n個求職者,s門課程.每門課程至少需要2個老師教,問符合要求的最小值

分析:

首先定義狀態:對於每乙個老師只有教或者不叫兩種決策,而方程想要轉移,很容易看出需要知道此時老師教授的情況.故:定義:f[i][s1][s2] i表示依考慮到前i個老師 s1為乙個老師教的集合 s2為兩個老師教的集合

f[i][s1][s2]=min(f[i+1][s1`][s2`],f[i+1][s1][s2]) // 對於i/*

為什麼是i+1?

因為對於整個dp過程來說,我們其實知道的是初狀態 f[0][0][0] 與 末狀態 f[m+n-1][1

<<(s)-1][0]

所以從前往後搜與從後往前搜是等價的

這裡是從前往後搜尋

*/

code:

#include

#include

#include

#include

#include

#include

#include

#include

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

#define fod(i,a,b) for(int i=a;i>=b;i--)

using

namespace

std;

const

int m=20+5,n=1e3+10,s=8,inf=0x3f3f3f;

vector

les[m+n];

int f[m+n][1

<1

int main()

memset(f,-1,sizeof(f));

printf("%d\n",dp(0,(1

<1,0,0));

}return

0;}

UVA 記憶化搜尋狀壓dp 1252

記憶化 搜尋,題目要求求要猜出每個物體所需要的最小次數 開始理解錯題意了,弄成一次性猜出所有的物體 其實是求猜出每個物體的次數中的最大次數 dp s b s 代表此時詢問過的集合 b 代表此時所要猜到的物體w,在集合s中所具有的特徵 include include include include i...

HDU 4778 記憶化搜尋 狀壓

給出g種寶石,b個包,和s,s代表到時候每種顏色的寶石湊齊s個能變成乙個魔法石 每個包裡有n種寶石,分別為c1,c2.然後兩人輪流拿包,每個包只能拿一次,拿出包把寶石放地上。如果能變成魔法石則拿走魔法石,下一次還這個人拿包,沒變成則換人。魔法石的個數就是獲得分數,問兩人最優的時候分差是多少。狀壓記憶...

POJ 2817 狀壓DP 記憶化搜尋

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