hdu1561——the mre,the better
題意:給定一棵包含n個結點的樹,每乙個節點附有對應的value,選取其中的m個結點使得總value最大。乙個結點被選擇的條件是其父節點已經被選擇。
解析:1.虛擬出乙個總根節點,將深林轉化為一棵樹。
2.d[r][i]表示在以r為根的子樹中選取i個結點所能獲得的最大value
d[r][i]=max(d[r][i],d[r][i-k]+d[v][k]); //v為r的乙個子節點
//date: 2015.04.22
//time: 109ms
//memory: 1792k
#include#include#includeusing namespace std;
const int max=205;
int n,m,v[max];
vectorson[max];
int dp[max][max];
void dfs(int r,int num) }}
void init()
int main()
dfs(0,m+1);
printf("%d\n",dp[0][m+1]);
} return 0;
}
hdu1011——starship troopers
題意:給定乙個包含n個結點的樹,每個節點附有對應的value和bug,為獲取value需消耗一定量的體力來消滅bug,在體力值一定的情況下,選取其中的哪些結點進行攻擊
可以使得獲取的總value達到最大。只有在父節點已經被攻擊後才可以繼續前進攻擊子節點。
//date: 2015.04.25
//time: 62ms
//memory: 1680k
#include #include #include #include #include using namespace std;
const int max=101;
int n,m;
int dp[max][max];
struct roomrooms[max];
void init()
void dfs(int r,int f,int trooper)
}}int main()
for(i=1;i
樹形揹包DP
include using namespace std const int n 310,m n 2 int h n ne m v m idx int w n int dp n n int n,m void add int a,int b void dfs int u for int j m j 0 ...
有依賴的揹包問題(樹形dp 揹包問題)
acwing 10.有 n 個物品和乙個容量是 v 的揹包。物品之間具有依賴關係,且依賴關係組成一棵樹的形狀。如果選擇乙個物品,則必須選擇它的父點。如下圖所示 如果選擇物品5,則必須選擇物品1和2。這是因為2是5的父節點,1是2的父節點。每件物品的編號是 i,體積是 vi,價值是 wi,依賴的父節點...
洛谷2014 選課(樹形DP 樹形揹包問題
在大學裡每個學生,為了達到一定的學分,必須從很多課程裡選擇一些課程來學習,在課程裡有些課程必須在某些課程之前學習,如高等數學總是在其它課程之前學習。現在有n門功課,每門課有個學分,每門課有一門或沒有直接先修課 若課程a是課程b的先修課即只有學完了課程a,才能學習課程b 乙個學生要從這些課程裡選擇m門...