poj1185 狀態壓縮DP

2022-05-31 18:27:08 字數 1063 閱讀 3336

狀態壓縮學習**:tju 周偉的《狀態壓縮》

第乙個狀態壓縮dp,

留**以後好看:

1 #include2 #include

3 #include4

#define n 101

5#define m 11

6#define s 66

7#define max(a,b) a>b?a:b89

intstate[n][s];

10char

map[m];

11int dp[2

][s][s];

12int

count[n][s];

13int

gra;

14int

n,m,s;

15int dfs(int

i)28 k++;29}

3031

}32 count[i][0]=k;

33return0;

34}3536

37int

main()

3853

//gra 表示當前行p的狀態

5455

dfs(i);

56//

搜尋當前行的可能放置的狀態state57}

5859

//初始化第一行

60for (int i=1;i0][0];i++)64}

65//

初始化第二行

66for (int i=1;i1][0];i++)71}

7273

7475

if (n>2)85

}86}87 dp[i&1][j][k] =max;88}

89}90}

91}92 max= 0;93

for (int i=1;i1][0];i++)97}

98 printf("

%d\n

",max);99}

100return0;

101 }

poj1185

poj 1185 狀態壓縮DP

這題開始直接狀態壓縮每行 2 m 然後就tle了。最後看了下別人的發現其實每行的狀態沒有這麼多,因為相鄰兩個大炮的距離不能小於2 所以當m為10 的時候每行的狀態只有60種,每次在得到m的時候,直接搜出這些狀態儲存起來,然後就可以了。ac 如下 include include include inc...

POJ 1185 (狀態壓縮DP)

中文題目,題意就不說了。不得不說這是一道十分經典的狀態壓縮dp的題目。思路 通過分析可以發現,第i行的格仔能不能放大炮僅與第i 1和i 2行的放法有關,而與前面的放法無關,因此,如果我們知道了i 1行和i 2放的狀態,那麼,我們就可以推出第i行的可行的放法狀態。因此可以看出i行的狀態由它上面兩行決定...

poj1185 狀態壓縮的dp

noi炮兵陣地,經典題!題意 略 解答 我一開始的思路是基於三進製的,0表示這個方格不受控制,1表示這個方格收到距離為1的方格的控制,2表示這個方格收到距離為2的方格的控制。後來發現有點煩!所以換了乙個。令f i j k 表示第i行,i 1行狀態為k,i 2行的狀態為j。j,k均為01串,1表示有炮...