照貓畫虎寫了道入門題。。講道理這東西我不應該現在才來學tat
//狀態壓縮dp入門題
//九宮格的相鄰限制條件
//n*n 3<=n<=15
/*dp[i][j]表示前i行,最後一行狀態為j時得到的最大分數和
對於一行j的所有可能可以用dfs弄出來,在同行搜尋的時候只要保證行不相鄰。
在判斷合法狀態轉移的時候,判斷本身、左移和右移即可。
dp[i][j] = max,其中k為和j不衝突的狀態。
s[0]表示狀態總數,s[i]表示第i個狀態。
sum[i][j]表示第i行第j個狀態的和
*/#include using namespace std;
char str[100];
int n,len,ans;
int a[20][20], sum[20][40000];
int dp[20][40000];
int s[40000];
void dfs(int x, int last, int now)//last表示上乙個格仔有沒有放,now表示當前狀態
dfs(x+1, 0, now << 1);
if (!last)
dfs(x+1, 1, now << 1 | 1);
}int main()}}
ans = 0;
for (int i=1;i<=s[0];i++)
ans = max(ans, dp[n][i]);
printf("%d\n", ans);
} }}
HDU2167 狀態壓縮DP
狀態壓縮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 include...
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之狀態壓縮
題目大意 給你乙個矩陣,讓你在矩陣中找一些元素使它們加起來和最大,但是當你使用某乙個元素時,那麼這個元素周圍的其它八個元素都不能取!需要記錄上一行的狀態數量,每一種的狀態,和從第一行到上一行每個狀態的總的元素和。當前行的話通過dfs,求出當前行狀態的個數以及每個狀態下當前行的值。之和比較上一行和當前...