HDU 1565 方格取數 1

2022-05-28 14:15:12 字數 912 閱讀 5769

problem description

給你乙個n*n的格仔的棋盤,每個格仔裡面有乙個非負數。

從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。

input

包括多個測試例項,每個測試例項包括乙個整數n 和n*n個非負數(n<=20)

output

對於每個測試例項,輸出可能取得的最大的和

sample input

375 15 21

75 15 28

34 70 5

sample output

188

分析: 主要思想是從第一行到第n行,從第一列到第n列進行dp,用位來儲存狀態,比如在i行j列,對所有的0到2^n  -1 狀態進行計算,最後的結果是從i=n-1,j=n-1的2^n個狀態求最大就ok了。別以為這運算量很大,其實只有o(n*n*2^n)比直接暴搜o(n!*n!)快了n多,因為這題資料比較小,n最大為20,所以可以這麼dp。但如果n很大的話這種方法顯然不行,那就要用到最大流了。

code:

view code

#include

#include

const

int mm=1

<<20+1;

int a[51][51];

int dp[2][(1

<<20)+1];

int maxn=-1;

int n;

void solve()}}

}int main()

return0;}

HDU 1565 方格取數 1

hdu 1565 方格取數 1 我的第乙個狀態壓縮dp 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數,從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大 3 75 15 21 75 15 28 34 70 5 188對於每乙個數...

HDU1565 方格取數 1

problem description 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括乙個整數n 和n n個非負數 n 20 ou...

hdu 1565 方格取數 1

這個題網上很多人都說用狀態壓縮dp來做,我就是覺得狀態壓縮dp有點那麼理解不上啊,不過如果這個題吧相鄰的兩個格仔連起來,那不就是求最大權獨立點集嗎?奮戰了三天,我的第一道最大流題目終於寫出來了,高興啊!include include include include include include i...