記憶化 搜尋,題目要求求要猜出每個物體所需要的最小次數
開始理解錯題意了,弄成一次性猜出所有的物體
其實是求猜出每個物體的次數中的最大次數
//dp[s][b]
//s : 代表此時詢問過的集合
//b : 代表此時所要猜到的物體w,在集合s中所具有的特徵
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef pairpii;
#define mem(a,b) memset(a,b,sizeof a)
#define clr(a) memset(a,0,sizeof a);
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
//#define local
int n,m;
char ch[150][15];
int dp[(1<<12)][(1<<12)];
int a[(1<<12)];
int dfs(int s,int b)
if(cnt<=1)return dp[s][b]=0;
for(int i=0;iif(s & (1return dp[s][b];
}int main()
}cout << dfs(0,0) << endl;
}return 0;
}
UVa 10817 狀壓 記憶化搜尋
描述 m個教師,n個求職者,s門課程.每門課程至少需要2個老師教,問符合要求的最小值 分析 首先定義狀態 對於每乙個老師只有教或者不叫兩種決策,而方程想要轉移,很容易看出需要知道此時老師教授的情況.故 定義 f i s1 s2 i表示依考慮到前i個老師 s1為乙個老師教的集合 s2為兩個老師教的集合...
POJ 2817 狀壓DP 記憶化搜尋
這個題的意思是第一行給出case數n 1 n 10 然後給出n個單詞,每個一行,當輸入不是正整數的時候結束。每個單詞最多10個字母。要求的是,按任意順序排列這些單詞,可以在單詞前面加任意個空格,使得相鄰的單詞上下對應的字母數目最多,並輸出最多是多少。先預處理出每兩個單詞相連所能對應的字母數最多的情況...
loj 1021 狀壓dp 記憶化搜尋)
題目大意 給定的乙個某進製下的排列,問它的全排列有多少個能夠整除給定的十進位制下的數字k。思路 記憶化搜尋,dp state r 表示在某狀態下被k除餘數為r有多少個。1 include2 include3 include4 include5 include6 using namespace std...