在 n×n
'>n×n
的棋盤上放 k
'>k
k 個國王,國王可攻擊相鄰的 8
'>8
8 個格仔,求使它們無法互相攻擊的方案總數。n×
n'>狀壓dp是一種比較暴力的dp。n×
n'>首先dp[i][j][k]表示前i行放置k個國王,且當前行狀態是j的方案數。n×
n'>轉移方程 dp[i][j][k] = dp[i - 1][m][k - sum[k]]n×
n'>sum[k]表示第k個合法狀態的放置的國王個數。n×
n'>什麼叫第k個合法狀態。由於每行的放置規則是有限的,所以可以預處理出合法狀態記錄到sum裡和乙個st陣列表示第i個合法狀態的國王個數。n×
n'>最後只要求 1 <= i <= cnt 下dp[n][i][k] cnt是合法狀態數
ll dp[12][1<< 10 + 5][105
];int st[1
<< 10 + 5
];int sum[1
<< 10 + 5
];bool check(int x, int
y) int
main()
}for (int i = 1; i <= cnt; i++) dp[1][i][sum[i]] = 1
;
for (int i = 2; i <= n; i++)
for (int j = 1; j <= cnt; j++)
for (int m = sum[j]; m <= k; m++)
for (int jj = 1; jj <= cnt; jj++)
if (check(st[j], st[jj])) dp[i][j][m] += dp[i - 1][jj][m -sum[j]];
ll sum = 0
;
for (int i = 1; i <= cnt; i++) sum +=dp[n][i][k];
put(sum);
}
SGU223 狀態壓縮
下午花了兩個小時把yali中學 陳丹琦的 基於連通性狀態壓縮的動態規劃問題 啃完,插頭dp還真是個麻煩的東西。相較sgu223算乙個水題了,給定n n的棋盤,擺放m個不相互攻擊的棋子,棋子攻擊範圍為相鄰8個位置。求方案數。dp i j k 第i行,狀態為j,放了k個棋子的方案數,dp i j k s...
習題 國王(狀壓DP)
題目 記憶體限制 64 mib時間限制 500 ms標準輸入輸出 題目型別 傳統評測方式 文字比較 提交提交記錄 返回比賽 題目描述 原題來自 sgu 223 在 n n的棋盤上放k 個國王,國王可攻擊相鄰的 8個格仔,求使它們無法互相攻擊的方案總數。輸入格式 只有一行,包含兩個整數 n 和k 輸出...
狀壓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 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...