HDU4003 樹上的分組揹包

2021-08-01 07:45:42 字數 874 閱讀 7959

我們在s節點上有k個機械人,現在我們派遣這k個機械人出去隨便走,要求在最短距離裡遍歷整棵樹

for 所有的組k

for 所有的物品i屬於組k

for j=w...w[i]

f[j]=max(f[j],f[j-w[i]]+v[i]);

至於樹上的分組揹包,也差不多。

但是對於此題,我們用f[i][j]表示i節點為根的子樹被派遣了j個機械人的最優解,對於每乙個兒子節點,對那個子樹派遣多少機械人就是物品。每組我們必須選乙個物品,處理方案是每次強制把f[son][0]裝入揹包。

至於怎麼處理走的路程的問題,如果不派遣機械人到這顆子樹,也就是讓乙個機械人到這棵子樹里轉一圈然後回來,所以就是f[son][0]+dis[x][son]*2;

接下來的方程自己分析一下吧,也可以看看**。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int read()

int n,s,num,tot;

int h[10005],ne[20005],to[20005],mon[20005];

int f[10005][12];

void add(int x,int y,int z)

void dfs(int x,int las)

}}int main()

dfs(s,-1);printf("%d\n",f[s][num]);

}return

0;}

hdu1561 樹上分組揹包

hdu1561 樹上揹包模板題 題意大概是給一棵樹,每個點有相應的權值,從樹根開始選取m個連通的點然後使得獲得的點權最大。我們假設dp u j 為以u點為根時,向下選取j個點獲得的最大權值。v為u的子節點,那麼可以看出其實當u點可以最多向下取p個點的時候,u點可以視為乙個容量為p的揹包,物品為dp ...

hdoj1011 樹上分組揹包

題意 給定一顆樹,每個結點有兩個屬性,即花費v和價值w,並且選擇子結點時必須選擇父結點,求總花費不超過m的最大價值。思路 樹上分組揹包。和poj1155相似,對於結點u,先遞迴計算其子結點v的dp值,然後對於每個子結點所代表的子樹,最多只有一種選擇方案,不能重疊,所以是分組揹包。dp u j 表示對...

分組揹包 hdu3033

題意 有k種品牌的鞋子,要每種都收集到至少乙個,有n雙鞋子,給出輸入 屬於那種品牌,花費,收藏價值。每雙鞋子只可以買一雙,問收藏價值最大能多少 思路 既然每種只能一雙那一定01揹包。但是又要求每種必須有乙個,因此對於每種品牌的鞋子都需要進行遍歷。分析 分組揹包問題其實只是將01揹包問題使用二維化陣列...