/******
題意:從乙個矩陣中選出一些數,選出的數不能相鄰,求能選出的最大的和;
思路:狀壓dp 也可以用什麼流做,不過現在不懂圖論
*******/
#include #include #include #include #define inf 0xfffffff
using namespace std;
int dp[20][17777], a[20][20], cnt, s[1<<20], num1[20][17777], n;
int num(int i, int k)
bool can(int k)
void dp()}}
}int main()
int i,j,k;
cnt=0;
for(i=0;ifor(j=0;jscanf("%d", &a[i][j]);
for(k=0;k<(1
dp();
int ans=0;
for(j=0;jans=max(ans,dp[n-1][j]);
printf("%d\n", ans);
}return 0;
}
狀壓dp入門 hdu1565
思路 將數字轉化為2進製,表示每一行被選的數字的情況,首先預處理哪些數字是可以取得的合法狀態,因為上下行之間沒有公共邊,可以通過這一條件知道合法狀態滿足右移或左移以為後 運算的和為0,將所有哥發的存入陣列中。然後直接暴力三重迴圈,用陣列f i j 表示前i行的第i行選取狀態用j的二進位制的表示的最大...
hdu 1565 狀壓dp入門題)
很明顯,當前行的狀態只與前一行有關 並且當前行的狀態與前一行的狀態 i j 0時才滿足條件 預處理出每種可能的狀態 從前往後列舉每一行的狀態 再列舉前一行的狀態 dp儲存該狀態下最優結果 pragma warning disable 4996 include include include incl...
HDU 1565 方格取數 1 (狀壓DP)
problem description 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括乙個整數n 和n n個非負數 n 20 ou...