洛谷P2279消防局的設立

2022-04-05 21:33:59 字數 2083 閱讀 7838

傳送門啦

乙個很摸不清頭腦的樹形dp

狀態:$ dp[i][0] $ :選自己

$ dp[i][1] $ :選了至少乙個兒子

$ dp[i][2] $ :選了至少乙個孫子

-----------------------------------覆蓋了自己的

$ dp[i][3] $ : 兒子孫子全部覆蓋

$ dp[i][4] $ :孫子全部覆蓋

-----------------------------------並沒有覆蓋自己

初始轉移方程:

$ dp[i][0] = 1+\sum min(dp[j][0...4]) $ ;

要使選了根節點之後合法(整棵子樹包括根節點被覆蓋)必須使兒子的孫子全部覆蓋, 0~4狀態滿足

$ dp[i][1] = min( dp[k][0] + \sum min(dp[j][0...3](j != k)) ) $ ;

要使選了乙個兒子之後合法 由於兒子只可以覆蓋到兄弟 所以孫子一定要全部被覆蓋 即兒子的兒子一定覆蓋 0~3滿足

$ dp[i][2] = min( dp[k][1] + \sum min(dp[j][0...2](j != k)) ) $ ;

使選了乙個孫子之後合法 由於孫子最多只能覆蓋到當前節點 所以兒子一定全部覆蓋 即所有兒子本身要被覆蓋 0~2滿足

$ dp[i][3] = \sum dp[j][0...2] $ ;

要使兒子及孫子全部被覆蓋 即兒子本身要被覆蓋 0~2滿足

$ dp[i][4] = \sum dp[j][0...3]; $

要使孫子全部被覆蓋 即兒子的兒子要全部被覆蓋 0~3滿足

注意:每種狀態由兒子轉移過來所以根的情況 要轉化成對於兒子來說的情況

然後改進狀態 因為每種轉移方程至少有三種可能最後取其中較小的 故時間效率較低

令 $ dp[i][k] $ 表示 $ min(dp[i][0],dp[i][1]....dp[i][k]) $ 且 $ k>=2 $ 因為上述轉移方程最少都是0~2狀態

那麼轉移方程就大幅度化簡了:

$ dp[i][0] = 1+\sum dp[j][4] $ ;

直接由上面變形而來

$ dp[i][1] = dp[i][4] + min(dp[k][0]-dp[k][3]) $ ;

選乙個兒子 需保證所有孫子被覆蓋 即 $ dp[i][4] $ 然後要選出乙個兒子 將他從0~3狀態變為選了自己(由於 $ dp[i][4] $ 中他是3狀態所以要減去乙個 $ dp[k][3] $ ) 取這個差值最小的兒子

$ dp[i][2] = dp[i][3] + min(dp[k][1]-dp[k][2]) $ ;

選乙個孫子 與上面類似 要保證所有兒子都被覆蓋 即 $ dp[i][3] $ 再將乙個兒子從02狀態變為01狀態以保證覆蓋他父節點

$ dp[i][3] = \sum dp[j][2] $ ;

保證所有兒子被覆蓋 兒子的0~2狀態均符合條件

$ dp[i][4] = \sum dp[j][3] $ ;

保證所有兒子的兒子被覆蓋 兒子的0~3狀態均符合條件

#include #include #include #include using namespace std;

const int maxn = 1005;

inline int read()

while(ch >= '0' && ch <= '9')

return x * f;

}int n,a[maxn][maxn];

int f[maxn][5];

int main()

for(int i=n;i>=1;i--)

} f[i][1] = f[i][4] + x1;

f[i][2] = min(f[i][3] + x2 , min(f[i][0] , f[i][1]));

f[i][3] = min(f[i][2] , f[i][3]);

f[i][4] = min(f[i][3] , f[i][4]);

} printf("%d",f[1][2]);

return 0;

}

dfs 洛谷 P2279 消防局的設立

題目描述 2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,...

洛谷2279消防局的設立

題目描述 2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,...

洛谷2279 消防局的設立

資料範圍 f i,3 表示 i 的所有兒子節點一定被消防局覆蓋。f i,4 表示 i 的所有孫子節點一定被消防局覆蓋。轉移方程 f i,1 min f k,0 sum min f j,0.3 f i,2 min f k,1 sum min f j,0.2 f i,3 sum min f j,0.2 ...