hihocoder 1055 刷油漆(樹形DP+揹包)
dp[i][j]表示i節點,已經染色j個節點的最大價值,那就是樹形DP,每個節點做一次揹包
程式碼:
#include <cstdio> #include <cstring> #include <vector> #include <algorithm> using namespace std; const int N = 105; int n, m, val[N], dp[N][N]; vector<int> g[N]; void dfs(int u, int p) { memset(dp[u], 0, sizeof(dp[u])); dp[u][1] = val[u]; for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (v == p) continue; dfs(v, u); for (int j = m; j >= 2; j--) { for (int k = 1; k < j; k++) { dp[u][j] = max(dp[u][j], dp[u][j - k] + dp[v][k]); } } } } int main() { while (~scanf("%d%d", &n, &m)) { for (int i = 1; i <= n; i++) { scanf("%d", &val[i]); g[i].clear(); } int u, v; for (int i = 0; i < n - 1; i++) { scanf("%d%d", &u, &v); g[u].push_back(v); g[v].push_back(u); } dfs(1, 0); printf("%d\n", dp[1][m]); } return 0; }
相關推薦
hihocoder 1055 刷油漆(樹形DP+揹包)
dp[i][j]表示i節點,已經染色j個節點的最大價值,那就是樹形DP,每個節點做一次揹包 程式碼: #include <cstdio> #include <cstring> #include <vector> #include <
HihoCoder 1055 : 刷油漆 樹形DP第一題
tdi 進行 vector coder div 評分 好玩的 scan style 刷油漆 時間限制:10000ms 單點時限:1000ms 內存限制:256MB 描述 上回說到,小Ho有著一棵灰常好玩的樹玩具!這棵樹玩具是由N個小球和N-1根木棍拼湊而
HIHO #1055 : 刷油漆(樹形dp 入門)
題目連結 入門的話還是看09《淺談幾類揹包問題》 = =。 設dp[u][j] : 表示對於,以編號是u的節點為根的子樹,選擇不超過j個節點,可以獲得的最大的價值。 狀態的轉移:dp[u][j]=ma
hihocoder 1055 刷油漆(樹形dp)
題意:有棵節點數為n的樹,節點都有對應的分數,要求找到以1為根的包含m個結點的樹所得分數最大。 思路:dp[u][j]表示以節點u為根的大小為 j 的樹可得到的最大分數,答案就是dp[1][m]。 狀
hihoCoder week12 刷油漆
題目連結: https://hihocoder.com/contest/hiho12/problem/1 給出一棵樹 每個節點的價值 求以1為根的樹中,選取m個相聯通的節點的最大價值和 #include <bits/stdc++.h> using namespace std
W - Apple Tree POJ - 2486 (樹形dp+揹包)
W - Apple Tree POJ - 2486 Wshxzt is a lovely girl. She likes apple very much. One day HX takes her to an apple tree. There are N nodes
bzoj4753(分數規劃+樹形DP+揹包DP+複雜度分析)
把0看做一個需要取的點,那麼通過題目給的約束條件這就變成了一個樹形揹包DP。。 然而這個比率貌似不好決策。。於是用分數規劃,這樣權值改變之後就變成常規樹DP 然後一個顯然的做法是在已取根節點的前提下把子樹的揹包合併到根上面去,可是會發現合併揹包的代價非常大,合併一次的複雜
(樹形DP+揹包)POJ1947Rebuilding Roads
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissi
The more, The Better HDU-樹形DP+揹包
題意:現有N座城堡,每座城堡有bi的寶藏,現在最多攻破M座城堡,且攻城要按順序,要共攻破第i座城必須先攻破第j座城 思路:把題意轉劃一下,容易建邊,val[0]=0,然後M++,這樣就可以看做每一個點都有一個父親節點需要攻破,一顆以0 為根的樹,接下來就是 樹形D
POJ 1155 TELE 樹形dp + 揹包
題目連結 題意 一個訊號傳輸網路是樹形的。m個潛在使用者,n-m個訊號發射站。其中1號是電視臺訊號發電站。每個發射站之間連通需要一定的花費。使用者都處在葉子節點處。且每個使用者都會給定量的前補償電視臺。在使電視臺不虧本的情況下,最多可以使多少使用者連同。
poj 3345 Bribing FIPA[樹形dp+揹包]
Bribing FIPA Time Limit: 2000MS M
poj1155樹形dp+揹包
題目大意:每個使用者必須連一個發射器,發射的訊號從一個點到另一個點需要費用,問電視臺在不虧本的情況下最多可以給多少個使用者發射訊號。 思路:dp[i][j]表示節點i發射j個訊號給使用者的盈利。注意:dp陣列初始化時,dp[i][0] = 0;其餘的負無窮,否則會出bug。
The 2018 ACM-ICPC CCPC寧夏 G-Factories(樹形dp+揹包)
題目:給你n個城市,n-1條道路,每兩個城市僅有一條通路,即一個樹形結構。讓你選擇m個葉子節點建立工廠,使得最終任意兩個工廠之間距離的累加和最小。 思路:考慮點之間的關係很繁瑣,所以我想的是對於一條邊來說考慮經過了它多少次。dp[u][i]表示u節點為根的子樹上選擇了i個葉
#1055 : 刷油漆(樹上的動態規劃)
描述上回說到,小Ho有著一棵灰常好玩的樹玩具!這棵樹玩具是由N個小球和N-1根木棍拼湊而成,這N個小球都被小Ho標上了不同的數字,並且這些數字都是處於1..N的範圍之內,每根木棍都連線著兩個不同的小球,並且保證任意兩個小球間都不存在兩條不同的路徑可以互相到達。沒錯,這次說的還是這棵樹玩具的故事!小Ho的樹玩具
刷油漆(樹形dp)
“是啊,我該怎麼做呢?”小Ho想道,但是如果能很快就自己想出來那也就不是小Ho了,於是小Ho還是老老實實去請教了小Hi。 小Hi聽了小Ho的問題,道:“這個問題不是很簡單麼?來,我們再重複一下之前的步驟——先抽象你的問題。” “好的!應該是這樣的——f(t, m)表示,在以t為根的一棵樹中,選出包含根節點t
樹形DP和狀壓DP和揹包DP
樹形DP和狀壓DP和揹包DP 樹形\(DP\)和狀壓\(DP\)雖然在\(NOIp\)中考的不多,但是仍然是一個比較常用的演算法,因此學好這兩個\(DP\)也是很重要的。而揹包\(DP\)雖然以前考的次數挺多的,但是現在基本上已經成了人人都能AK的題了,所以也不經常考了。 樹形DP 樹形DP這個非常特殊
HihoCoder-1676 樹上的等差數列(樹形DP)
題意 給定一棵 n n n 個節點的樹,每個點都有點權。求一條最長的路徑,是路徑上點的點權序列形成等差數列。 1≤n≤100000 1
【洛谷P2014】選課【樹形DP】【揹包】
題目大意: 題目連結:https://www.luogu.org/problemnew/show/P2014 有 n n
CTSC1998 選課(揹包類樹形Dp)
題意: 給出 n 節課的先修課號以及學分(先修課號指的是在學習某節課時先需要學習的課程),求學 m 節課的最大學分。 細節: 1、對於課程 a 其先修課號為 b ,對於課程 b 其先修課號為 c ,則需要學 a 的方式必須為先學 c 在學 b。 2、可能存在多門課程沒有先修課號。
POJ - 1947 Rebuilding Roads 樹形dp+分組揹包
The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows d