狀壓DP 小王(Little Kings)

2021-09-25 09:58:18 字數 946 閱讀 1941

狀壓操作感覺挺複雜的。

首先,這樣乙個矩陣,僅僅有兩個狀態,放與不放。嗯。我們考慮dp或搜尋。

很明顯,搜尋非常優(la)秀(ji)。我們需要用dp。

由於n很小,我們選擇狀態壓縮。每一行中,國王放的情況是一定的,所以情況以及其對應個數我們可以直接預處理出來,然而同時每一行中的國王必須要隔開,對的,不能夠互相攻擊,我們要進行判斷。

國王是限制條件,我們要放到dp中,然後有了行的狀態,我們枚舉行,放到dp中。

綜上所述

dp[i][j][k]表示前i行,j號狀態所要放的國王數k

那麼肯定是由i-1行中乙個滿足條件的dp轉移過來,於是。

dp[i][j][s]=sum(dp[i-1][k][s-gs[j]])。

判斷就非常簡單明瞭,我們用&(都1為1,否則為0)

兩個狀態,如果(zhuangtai(j) & zhuangtai(p))那肯定不行。

然後就是斜著來。左移就差不多了

然後照著來,最後找出答案,提一點,由於題目僅僅控制國王數一定,我們就要列舉兩個變數。

#include#include#include#include#include#include#includeusing namespace std;

int n,k;

long long state[100005],king[100005],dp[15][10005][105],tot;

long long ans;

void find()

} }}int main()

}} }

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

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

ans += dp[i][j][k];

printf("%lld",ans);

}

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