狀態壓縮學習**:tju 周偉的《狀態壓縮》
第乙個狀態壓縮dp,
留**以後好看:
1 #include2 #includepoj11853 #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 }
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表示有炮...