思路:狀態壓縮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#includeusing namespace std;
const int maxn = 15;
const int mod = 100000000;
int dp[maxn][400];
int top, tmp, n, m;
int map[maxn], status[400];
void init()
}int main()
}for(int i = 1;i < top;i ++)
for(int i = 2;i <= n;i ++)}}
int ans = 0;
for(int i = 1;i < top;i ++)
printf("%d\n", ans);
}return 0;
}
poj3254 狀態壓縮DP
全程精講 農夫有一塊地,被劃分為m行n列大小相等的格仔,其中一些格仔是可以放牧的 用1標記 農夫可以在這些格仔裡放牛,其他格仔則不能放牛 用0標記 並且要求不可以使相鄰格仔都有牛。求方案數 include include using namespace std define mod 10000000...
poj3254 狀態壓縮dp
題意 乙個n m的矩陣,每個格仔是0或者1,1表示土壤肥沃可以種植草地,0則不可以。在種草地的格仔可以放牛,但邊相鄰的兩個格仔不允許同時放牛,問總共有多少種放牛的方案 不放牛也算一種情況 思路 狀態壓縮 感覺不大像dp。dp i j 表示第i行狀態為j時符合條件的方案數 我們可以先求出一行的所有可行...
POJ3254(狀態壓縮DP)
與poj1185類似,不過這裡每一行的狀態只收前一行影響,所以用 f i t 表示第 i 行狀態為 stk t 時的總方案數,那麼根據加法原理,f i t f i t f i 1 j j 表示第 i 1 行所有合法的切與狀態 stk t 不相鄰的狀態,記得取模。還有就是對每一行的狀態判斷是否合適,就...