POJ3254(狀態壓縮DP)

2021-07-16 02:35:45 字數 615 閱讀 6026

與poj1185類似,不過這裡每一行的狀態只收前一行影響,所以用 f[i][t] 表示第 i 行狀態為 stk[t] 時的總方案數,那麼根據加法原理,f[i][t] = f[[i][t] + f[i-1][j],j 表示第 i-1 行所有合法的切與狀態 stk[t] 不相鄰的狀態,記得取模。

還有就是對每一行的狀態判斷是否合適,就是不能在貧瘠的草場放牛。(判斷的狀態與要判斷的那一行一定要看清,不然是不會過的,不要問我是怎麼知道的

#includeusing namespace std;

int stk[1000];

int dp[15][1000];

int cur[15];

int tot;

bool legal(int x)

void init(int n)

}init(m);

for (int i=1; i<=tot; i++)

for (int i=2; i<=n; i++)

for (int t=1; t<=tot; t++)

}int ans = 0;

for (int i=1; i<=tot; i++)

cout<

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...

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時符合條件的方案數 我們可以先求出一行的所有可行...