具體見注釋
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define mod 100000000
int n,m,map[15];//map陣列用來存圖
int cnt[10000],dp[15][10000];//cnt存當一層每處都可以放置東西時,所有滿足題意的情況
int k;
bool ok(int x)//判斷某種方法是否滿足題意
void find()
return true;
}int dfs(int cur,int state)
{ if(cur==n) return dp[cur][state]=1;
if(dp[cur][state]!=-1) return dp[cur][state];//記憶化搜尋
int ret=0;
for(int i=0;i<(1<>n>>m;
memset(map,0,sizeof(map));
memset(dp,-1,sizeof(dp));
for(int i=0;i>t;
if(!t) map[i]|=1<
poj解題報告 3254
狀態壓縮dp。題意 給出乙個n行m列的草地,1表示肥沃,0表示貧瘠,現在要把一些牛放在肥沃的草地上,但是要求所有牛不能相鄰,問有多少種放法。分析 假如知道第 i 1 行的所有的可以放的情況,那麼對於第 i 行的可以放的一種情況,只要判斷它和 i 1 行的所有情況的能不能滿足題目的所有牛不相鄰,如果有...
POJ 3254,POJ 1185(狀態壓縮DP)
poj 3254 corn fields 我們可以用二進位制列舉第一行狀態,用1代表在這種植,0代表不種植,第一行確定了,第二行就可以根據第一行不斷累加。dp row state 代表第row行用state狀態時的方法數。如果這個state合法,則dp row state dp row 1 stat...
POJ 3254 (狀態壓縮DP)
思路 狀態壓縮dp,用二進位制位的1表示放了,0表示沒有放。設dp i j 表示第i行狀態為j時,前i行的方案數,狀態轉移方程就是 dp i j dp i 1 k j與k這兩個狀態不衝突。最後答案就是dp n 1.top 之和。include include include include incl...