n個城市都在賣一種書,該書的**在i城市為cost[i],商人打算從某個城市出發到另乙個城市結束,途中可以在任意城市買書或者賣書,但一次只能買一本和賣一本,乙個城市到另乙個城市需要花費。問商人最大收益是多少。
方法一(樹形dp):
設dp[u][0]表示在以u為根的樹中賣一本書獲得的最大價值,dp[u][1]表示在以u為根的樹中買一本書獲得的最大價值。那麼在以u為根的子樹中能獲得的最大價值為max(dp[u][0])+max(dp[u][1]).
1 #include2 #include3 #include4 #include5 #include6using
namespace
std;
7const
int maxn = 1e5 + 100
;8 typedef pairp;
9 vectorg[maxn];
10int dp[maxn][2
], ans;
11int
cost[maxn];
1213
void dfs(int u,int
pre)
1425 ans = max(ans, dp[u][0] + dp[u][1
]);26}27
28int
main()
2939
for (int i = 1; i < n; i++)
44 ans = 0
;45 dfs(1,-1
);46 printf("
%d\n
", ans);47}
48return0;
49 }
HDU 4276 樹形dp spfa 分組揹包
題意 給你n個點,n 1條邊構成樹,每條邊有邊樹,每個點有點權 表示走每條邊的時間 問在時間t從點1走到點n,能夠得到最多的點權有多少。首先我們至少要保證1到n的最短路在時間內,此時用spfa,其次,在最優的情況下,最短路徑上的邊只會經過一次,而其他邊會經過兩次,對於最短路上的邊,spfa走的時候記...
HDU 1520 簡單樹形dp
題意 乙個大學要舉行職工party。為使party中每個人都玩的開心,直接上司和下屬關係的員工不能同時參加。每個人都有各自的歡樂值。問如何邀請使得總歡樂值最大。dp i 1 表示選擇i點 dp i 0 表示不選擇i點 include include include include using nam...
HDU 2196 樹形dp入門
鏈結 傳送門 題意 給你乙個n個節點的棵樹,然後給你和 第i臺電腦與第a臺電腦相連的花費 v 問你最長的線路是多長 求樹上任意節點所能達到的最遠點的距離 樹形dp 開個陣列 分別記錄這個點到子樹最遠節點的最長距離和次長距離和記錄到父節點上的最長距離這樣在樹上dp 1.求子樹最長和次長 dp u 0 ...