題目大意:給出n*m的方格,有些格仔不能鋪線,其它格仔必須鋪,可以形成多個閉合迴路。問有多少種鋪法?插頭dp板子題,題目要求可以是多個迴路,
只需要兩個狀態,代表是否有插頭即可
$plug_1$ $plug_2$
0 0 新建乙個插頭插向兩邊
0 1 轉/不轉彎
1 0 同上
1 1 合併插頭
題目大意:乙個 m * n 的棋盤,有的格仔存在障礙,求經過所有非障礙格仔的哈密頓迴路個數與t1不同的是必須是乙個閉合迴路
類似於括號匹配,兩個插頭代表是左右
$plug_1$ $plug_2$
0 0 新建乙個插頭插向兩邊
0 1 轉/不轉彎
0 2 同上
1 0 同上
1 1 合併插頭,並且把$plug_2$的右插頭改為左插頭
1 2 注意這種情況一定是一對插頭碰到了一起,直接判斷是不是最後乙個方塊統計答案或者棄掉
2 0 轉/不轉彎
2 1 直接合併
2 2 合併插頭,並把$plug_1$的左插頭改為左插頭改為右插頭
第一行為兩個正整數n和m,表示遊樂場的大小為n×m。這道題與t2類似,只是不需覆蓋滿,仍要特別注意1-2合併的情況n和m滿足:2<=n<=100,2<=m<=6。
接下來的n行,每行有m個整數,第i行第j列表示遊樂場的第i行第j列的小格仔中的娛樂專案的滿意度,滿意度的範圍是[-1000,1000]。同一行的兩個整數之間用空格隔開。
輸出檔案中僅一行為乙個整數,表示最高的滿意度之和。
一家縮寫為 lll 的公司正在設計 logo,他們的初步方案是在一張方格上放置三個 l 形的圖案以及一些額外的裝飾性圖形。例如:設dp[i][j][k][l][r]代表到了第i行第j列已經設計了k個'l'型,斜著有沒有插頭,其他插頭的分布狀態是r(已經預處理)的方案數(灰色區域表示裝飾性圖形)
三個 l 圖案和裝飾性圖形均放置在方格之中,且必須佔滿方格,「l」的橫豎筆畫長短均可,但長度必須大於零(即不能退化為一條線段)。另外,為了使 l 圖形醒目且容易識別,設計師規定三個 l 形圖案之間不能有重疊或交叉的部分。當然,l 形圖案也不能穿過裝飾圖形或與之重疊。
現在設計師已經確定了所有裝飾性圖形的位置,希望你計算一下放置不同的 l 形圖案總共可以設計出多少個 logo。
直接輪廓線dp即可,分類討論比較簡單不再描述
題目大意:要求找一條路徑,使得每個點最多經過一次,並且點權值之和最大。很不錯的一道題,插頭的定義能對前面的題有乙個更深的理解
這道題與t3區別在於不需要是一條迴路,
這樣便會出現一些在當前狀態下沒有與其匹配的插頭,
我們不妨稱其為獨立插頭,用3來表示,
當然當前狀態下可能會出現2個獨立插頭,它們只是還沒有會合而已。
$plug_1$ $plug_2$
0 0 建立一對(1,2)/某個方向建立3
0 1 轉/不轉/停止並且2改3
0 2 轉/不轉/停止並且1改3
0 3 轉/不轉
1 0 同0,1
1 1 右2改1
1 2 (只剩一對1,2)則更新ans
1 3 左2改3
2 0 同0,2
2 1 合併
2 2 左1改2
2 3 左1改3
3 0 轉/不轉/(只剩乙個3)則更新ans
3 1 右2改3
3 2 右1改3
3 3 (只剩一對3,3)則更新ans
插頭dp的ans更新一般都比較神奇,可能不侷限於最後的某乙個狀態,而是在dp的過程中對於某些可以終止的狀態進行統計
比如說這個題,可以在(只剩一對3,3),(只剩一對1,2)(只剩乙個3)的情況下更新答案
總結 插頭 dp
集中做完了插頭 dp 寫一下題解。一開始學的時候還是挺矇的。不過後來站在輪廓線 dp 的角度上來看就簡單多了。其實就是一種聯通性 dp 只不過情況比較多而已了。本來轉移方式有兩種。逐行和逐格轉移。不過逐行轉移因為分類太多所以被捨棄了。一般的插頭 dp 採用逐格轉移。插頭表示已經進入當前格仔的狀態,而...
插頭DP總結
從跳樓到蒙b。插頭dp,電源插頭dp,工業插頭dp,插座dp。額我們先將一些技能的,比如說hash表,這年頭連hash表都不會打,簡直就是yasi。hash使用乙個表頭加鍊表的結構實現陣列的使用。比如說要統計值域到1e9的一列數出現次數,顯然我們就把一列數壓一下,比如模乙個質數同餘的放在一起,然後把...
插頭DP 入門
強烈推薦 hdu 1693 eat the trees 多迴路的不用判聯通狀態,二進位制即可,轉移情況2 2種。時間o n m 2 n 空間o n 2 n 插頭dp include include const int maxm 13 const int maxn 1 12 typedef long ...