之前想做黑書上的那個狀態壓縮dp,不會寫
退而求其次,寫了這個,也糾結也好久,其實只要想好, 算好時間複雜度,大膽寫就好,想的時候總覺得這樣會超時,迴圈好多什麼什麼的,又懶得看解題報告,所以拖了好久……結果寫出來就a掉了,219ms~
/*dfs求出每一行的狀態,最多一行的狀態是60中,算不出的可以用10個p跑一下看看~
dp[i][j][k] = dp[i-1][k][t] + rowcount[i][j]
dp[i][j][k] 表示第i行選擇狀態為j, i-1行為k狀態
rowcount[i][j] 表示 第i行選擇j狀態時,此行炮兵的個數
rowstate[i][j]為第i行,第j種狀態(10位,二進位制壓縮為乙個數)
tot[i]為每行共有多少狀態數
*/#include #include #include #include using namespace std;
int m, n, mit[110][15], dp[110][65][65];
int rowstate[110][65], rowcount[110][65], ans, bin[15], tot[110];
void dfs(int st, int r, int id, int aa)
}}void dynamic()
for( i= 2; i<= n; i++){
mm= 0;
for( j= 0; j< tot[i]; j++){
for( k= 0; k< tot[i-1]; k++){
if( (rowstate[i][j]&rowstate[i-1][k]) == 0 ){
for( t= 0; t
poj1185 炮兵陣地(狀態壓縮)
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 15261 accepted 5743 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地 ...
poj 1185炮兵陣地(狀態壓縮)
炮兵陣地 time limit 2000ms memory limit 65536k total submissions 32180 accepted 12437 description 司令部的將軍們打算在n m的網格地圖上部署他們的炮兵部隊。乙個n m的地圖由n行m列組成,地圖的每一格可能是山地...
POJ1185 炮兵陣地 狀態壓縮DP
感覺和3254很像,不過這次的間隔變成兩格,當前行的狀態與上兩行的狀態有關。狀態轉移方程 dp k q i max dp k q i dp q j i num k num k 表示狀態k的炮兵數量 dp k q i 表示當前第i行為狀態k上一行的狀態為q的炮兵數量總數。炮兵陣地 time limit...