在n*n(n≤20)的方格棋盤上放置n 個車(可以攻擊所在行、列),求使它們不
能互相攻擊的方案總數。
僅供和我一樣的菜鳥們參考
以n=4為例子解析原始碼
#include
#include
using namespace std;
__int64 a[1100000];
int main()
}cout《前乙個狀態壓縮的公升級版
在n*n(n≤20)的方格棋盤上放置n 個車,某些格仔不能放,求使它們不能互相攻擊的方案總數。
和前面差別不大,主要是加了乙個不可達點的限制,那麼用二進位制記錄每乙個不可達點然後還是按照以前的進行位運算,我寫的**不知道對不對,只核對了3以下的資料,希望路過神牛予以點評或修改
#include
#include
using namespace std;
__int64 a[1100000];
int is_allow[20];//用位記錄所有不能放置棋子的位置
int counter[21][21];
/*void turn(int x, int n)//轉換成二進位制輸出,屬測試**
for (int i = num; i < n; i ++)cout<<0;
for (int i = num-1; i >=0 ; i --)cout<= 1; j --)
is_allow[i] = sum;
}
}int main()
chang(n);//轉化
memset(a, 0, sizeof(a));
a[0] = 1;
for (int i = 1; i <= 1< 0; j -= (j&-j))
}printf("%i64d", a[(1<} return 0;
}
狀態壓縮DP入門題
1 本題為狀態壓縮題 2題目大意 3乙個矩陣裡有很多格仔,每個格仔有兩種狀態,可以放牧和不可以放牧,4可以放牧用1表示,否則用0表示,在這塊牧場放牛,要求兩個相鄰的方 5格不能同時放牛 不包括斜著的 即牛與牛不能相鄰。問有多少種放牛方 6案 一頭牛都不放也是一種方案 7要列舉每一行中的是否種植 也就...
狀態壓縮DP入門
中考前乙個學期都沒怎麼碰資訊,終於中考完了,第乙個來學習一下幾個dp。狀壓dp在提高組好像挺常考,而且我也一直不太會,便來學習一下。狀壓dp的基礎便是位運算。先來列幾個 與運算,二進位制下每一位進行如下運算 1 1 1 1 0 0 0 1 0 0 0 0,如 110 100 100,十進位制下即表示...
狀態壓縮dp入門
poj1321 我們可以把棋盤的每一行看做是乙個狀態,如果某一列放置了棋子,那麼就標記為1,否則就標記為0.然後把它看成是乙個二進位制數,然後轉為10進製數,就可以當做陣列下標然後進行狀態轉移了 設dp i s 為處理到第i行時,狀態為s的方法數 那麼我們列舉第i 1行的所有狀態s dp i s d...