1273 宣傳牆(狀壓dp )

2022-09-03 16:45:07 字數 1425 閱讀 5362

記憶體限制:64mb

時間限制:1000ms

特判: no

通過數:14

提交數:50

難度:4

alpha 小鎮風景美麗,道路整齊,乾淨,到此旅遊的遊客特別多。cba 鎮長準備在一條道路南 面 4*n 的牆上做一系列的宣傳。為了統一規劃,cba 鎮長要求每個宣傳欄只能佔相鄰的兩個方格 位置。但這條道路被另一條道路分割成左右兩段。cba 鎮長想知道,若每個位置都貼上宣傳欄, 左右兩段各有有多少種不同的張貼方案。 例如: n=6,m=3, k=2, 左,右邊各有 5 種不同的張貼方案 

第一行: t 表示以下有 t 組測試資料 ( 1≤t ≤8 )

接下來有t行, 每行三個正整數 n m k 分別表示道路的長度,另一條道路的起點和寬度

(1≤ n ,m ≤ 1 000 000, 1≤ k ≤ 100000)

每組測試資料,輸出佔一行:兩個整數,分別表示左右兩段不同的張貼方案數。由於方案總數

可能很大,請輸出對 997 取模後的結果。

複製

2

6 3 2

5 3 2

5 5

5 1

ac:** 0ms

#include #include #include #include using namespace std;

typedef long long ll;

typedef long long int lli;

typedef unsigned long long llu;

const int maxn = 1<<4;

const int mod = 997;

struct matrixx;

int n,m,k;

int s1,s2;

matrix mulmatrix(matrix a,matrix b,int c,int d,int e)

return res;

}void dfs(int i,int j,int k,int u)//i 行 j 這一列的狀態 k 下一列 u (ii)

if((j&(1在網上找到了一種簡單一點的**貼一下

#include #include #include const int col = 4;

int row;

int dp[900000][1<<4];

void dfs(int r,int c,int pre,int now)

if(c+1<=col)

if(c+2<=col)

} int main()

else

{ memset(dp,0,sizeof(dp));

dp[0][(1<

狀壓dp 玉公尺田 狀壓dp

相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...

狀壓dp小記

鋪磚 題意 現有nm的一塊地板,需要用12的磚塊去鋪滿,中間不能留有空隙。問這樣方案有多少種 include using namespace std typedef long long ll const int maxn 1 11 int n,m,state ll dp 15 maxn s1表示本行...

狀壓dp學習

p2704 炮兵陣地 1038 裁玻璃 狀壓dp是一種非常暴力的做法,列舉所有可能的狀態,找到要求的最佳狀態,與一般dp不同,前一項與後一項有一些複雜的狀態關係。dp的引數 物品個數 行數等 當前狀態 上乙個狀態 將abc的有無表示成乙個8個狀態,列舉所有組,列舉上乙個狀態,得到當前狀態的最優解 i...