現在對簡單題的態度也變了,覺得簡單題未必不能幫助你提高。簡單題往往更裸,更能單獨體現某乙個知識點或者技巧。而複雜題目往往是幾種技巧的組合使用。
這是一道入門的狀態壓縮dp。
在乙個棋盤上選擇一些不相鄰的點(上下左右),求這些點的總數。有一些點不可選。
首先把每行可能的狀態儲存下來。存在state裡面,因為限制了不相鄰,所以這樣一輪篩選之後單行的狀態數就已經少了很多。
然後對每一行i 列舉所有可能到達這個狀態的 i-1行的狀態。因為狀態只和上一行有關。然後求和就可以了。
#include#include#includeusing namespace std;
int dp[20][500];
const int mod=100000000;
int tot;
int state[500];
void init(int n)
{ int k=1<=0;j--)
{int k;
scanf("%d",&k);
row[i]+=(k<
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時符合條件的方案數 我們可以先求出一行的所有可行...