狀態壓縮DP poj2411 矩形填充木塊問題

2021-10-24 16:11:32 字數 801 閱讀 3929

從某場筆試遇到的題,群裡太多人改網上**只能對60%。我是100% 特地記錄下。

分析:

首先我們定義如下這種填充表示方式:如果乙個骨牌是橫著放的,那麼它所在的兩個方格都填充0.如果它是豎著放的,那麼它所在的兩個格仔中,上面的那個填1,下面的這個填0.如下圖所示:

圖來自:部落格  右邊的圖  0  和 1互換就好了。

1、每一行的  每兩位 不能出現01的情況,非法,最後一位不能是單獨的0

#include#include#include#includeusing namespace std;

typedef long long ll;

ll dp[15][2050];//dp[i][j]表示第i行狀態為j時的總種數 j中1表示這位置有小木塊,0表示這位置沒小木塊或者說上面的一半放在這裡這樣0的狀態就不會再影響下面的狀態了

int row,col;

bool valid(int n, int x)

}return 1;

}void init() }}

int main()}}

} printf("%i64d\n",dp[row][0]);

} return 0;

}

輪廓線dp poj2411 鋪磚問題

我們要求什麼?計數。嗯,dp,貌似是個好的辦法。數目由什麼確定?不太知道 不過我們好像做過相似的題目,比如 開關問題 鋪的磚受上下左右的磚塊的影響,我們強行只考慮右和下的方向,就和開關問題,這樣有助於簡化一下問題 也就是一塊磚只影響他的右和下的方向鋪磚時候 這樣鋪和向下鋪,而不是 這樣鋪和向上鋪。我...

狀態壓縮DP POJ 1170

題意 乙個商店提供多種商品,當使用者單獨購買商品時有乙個 當使用者組合購買時可以獲得優惠,現在提供多種優惠方案和需要購買的物品總數,問最大的優惠是多少。輸入2 7 3 2 8 2 5 21 7 3 5 2 7 1 8 2 10 表示有 2 種商品,編號分別是 7 和 8,分別要購買的數量是 3 和 ...

poj 2411 狀態壓縮DP

用乙個vector容器來記錄當前狀態下有哪些狀態可以繼承。比如說vec i 裡面的所有的數代表當第一行為i狀態時,第二行的可行狀態。對於狀態i,其二進位制中0的地方表示為當前狀態為豎著的木板的下半部分。其二進位制中1的地方表示為當前狀態為橫著的木板或者豎著的木板的上半部分。include inclu...