HDU2167 狀態壓縮DP

2022-04-21 11:28:23 字數 1194 閱讀 4885

狀態壓縮dp

詳見**

1/*2

狀態壓縮dp

3dp[ i ][ j ]:第i行j狀態的最大和

4dp[i][j] = max( dp[i-1][k]+sum[i][j] );

5題意:給定乙個n*n的方格,讓你在裡面取出一些數使其和最大,要求每乙個數不能與其相鄰的8個數同時取出6*/

7 #include8 #include

9 #include10 #include11 #include12 #include13 #include14 #include15 #include16

using

namespace

std;

17const

int maxn = 15;18

int sum[ maxn+5 ][ 1

/sum[i][j]:第i行j狀態的數字和

19int s[ 1

/合格的狀態的集合

20int dp[ maxn+5 ][ 1

/dp[i][j]:第i行j狀態的最大和

21int mat[ maxn+5 ][ maxn+5

];22

int binary[ maxn+5

];23

void

init_binary( )28}

2930

int solve( int

n )39 }//

選出無相鄰數字的狀態

40for( int i=0;i)46}

47}48 }//

預處理出sum值

49int ans = 0;50

for( int i=0;i)

54for( int i=1;i)62}

63}64}

65 ans =max( ans,dp[i][j] );66}

67}68return

ans;69}

7071

intmain()

80for( int i=1;i)86}

87int ans =solve( n );

88 printf("

%d\n

",ans);

89getchar();90}

91return0;

92 }

view code

HDU 2167 狀態壓縮dp

第一道狀態壓縮dp,其實就是爆搜,只不過把排除了大量不可能的情況,先用sta儲存每行可能的情況,sum i j 儲存i行j種情況的該行和,然後依次更新dp。include include include using namespace std int n,sum 20 1 15 dp 20 1 15...

hdu2167 狀態壓縮DP入門題

照貓畫虎寫了道入門題。講道理這東西我不應該現在才來學tat 狀態壓縮dp入門題 九宮格的相鄰限制條件 n n 3 n 15 dp i j 表示前i行,最後一行狀態為j時得到的最大分數和 對於一行j的所有可能可以用dfs弄出來,在同行搜尋的時候只要保證行不相鄰。在判斷合法狀態轉移的時候,判斷本身 左移...

hdu2167之狀態壓縮

題目大意 給你乙個矩陣,讓你在矩陣中找一些元素使它們加起來和最大,但是當你使用某乙個元素時,那麼這個元素周圍的其它八個元素都不能取!需要記錄上一行的狀態數量,每一種的狀態,和從第一行到上一行每個狀態的總的元素和。當前行的話通過dfs,求出當前行狀態的個數以及每個狀態下當前行的值。之和比較上一行和當前...