題目:
記憶體限制:64 mib時間限制:500 ms標準輸入輸出
題目型別:傳統評測方式:文字比較
提交提交記錄
返回比賽
題目描述
原題來自:sgu 223
在 n*n的棋盤上放k 個國王,國王可攻擊相鄰的 8個格仔,求使它們無法互相攻擊的方案總數。
輸入格式
只有一行,包含兩個整數 n 和k 。
輸出格式
每組資料一行為方案總數,若不能夠放置則輸出 0。
樣例樣例輸入 1
3 2
樣例輸出 1
16
樣例輸入 2
4 4
樣例輸出 2
思路:因為n小,所以第一選擇就是搜尋或者狀壓dp,因為每乙個各自的狀態為放或者不放,總的時間複雜度為o(2^n^2)
之後考慮狀壓dp ,設dp[i][j][k],為第i行狀態為j一共有k個國王,j狀態指將j轉化成二進位制,每一位上的數是1就代表放,
反之則代表不放,
考慮衝突問題
就是上一行的狀態右移或者左移再並,
最後統計一下最後一行的答案即可
還有一些小優化,因為每一行的狀態的總數是一定的,列舉每乙個狀態,也就是1~2^n時,
有些狀態是不行的,
此時我們將這些可行的狀態記錄下來
**
#includeusing namespace std;
int n,num_king;
long long dp[15][1050][105];
int a[1050];
int num[1050];
int tot;
long long ans;
int main()}}
}} }
for(int i=1;i<=tot;i++)
cout
}
狀壓dp基礎習題
題解非常基礎的一道狀壓dp 我們用二進位制來表示每一行取數情況,1 11表示取,0 00表示不取 很容易得到狀態轉移方程 f i j max f i j f i 1 k a ns i j f i j max f i j f i 1 k ans i j f i j ma x f i j f i 1 k...
SGU 223 國王 狀壓DP
在 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 s...
狀壓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 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...