從某場筆試遇到的題,群裡太多人改網上**只能對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...