有依賴的背包

原題鏈接

關(guān)鍵:當(dāng)遞歸處理u結(jié)點的子樹返回時,進(jìn)行分組背包的決策,各個子樹中的結(jié)點可能非常多私痹,可能有100多個結(jié)點凰萨,因此,如果以方案來劃分最多有2^100種類別丝格,所以要改用體積來劃分

從j表示當(dāng)前除去v[u]的體積,j從[ m - v [u] , 0 ]的體積中枚舉(類別),k選取體積是0,是1......是j(選一個)——>轉(zhuǎn)化為分組背包問題

轉(zhuǎn)移方程為:dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[son][k])

物品組選完以后努咐,再將u結(jié)點如,此時需要枚舉背包剩余體積
1.對于j>=v[u]&&j<=m的體積殴胧,可以裝入u結(jié)點渗稍,更新相應(yīng)的dp數(shù)組
2.對于j<v[u]的體積佩迟,無法裝入u結(jié)點,因此以u為根節(jié)點的子樹不存在竿屹,dp[u][j]=0;

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N=110;

int n,m;
int h[N],e[N],idx,ne[N];
int v[N],w[N];
int dp[N][N];//表示在所有以u為根的子樹中選报强,且總體積不超過j

void add(int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

void dfs(int u)
{
    //首先遍歷一下子樹
    for(int i=h[u];~i;i=ne[i])//枚舉物品組
    {
        int son=e[i];
        dfs(e[i]);
        
        //分組背包的過程,對于這一組子樹內(nèi)部以體積劃分
        for(int j=m-v[u];j>=0;j--)//循環(huán)體積,先給v[u]騰出位置來
            for(int k=0;k<=j;k++)//循環(huán)決策,枚舉當(dāng)前用多少體積
                dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[son][k]);//不要寫成w[i],是子樹的體積和質(zhì)量
    }
    
    //在體積為j時,再將當(dāng)前u加進(jìn)去
    //相應(yīng)更新dp數(shù)組
    for(int j=m;j>=v[u];j--)dp[u][j]=dp[u][j-v[u]]+w[u];
    for(int j=0;j<v[u];j++) dp[u][j]=0;
}


int main()
{
    int root;
    
    cin>>n>>m;
    
    memset(h,-1,sizeof h);
    
    for(int i=1;i<=n;i++)
    {
        int p;
        cin>>v[i]>>w[i]>>p;
        if(p==-1) root=i;
        else
            add(p,i);
    }
    dfs(root);
    
    cout<<dp[root][m]<<endl;
    
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拱燃,隨后出現(xiàn)的幾起案子秉溉,更是在濱河造成了極大的恐慌,老刑警劉巖碗誉,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坚嗜,死亡現(xiàn)場離奇詭異,居然都是意外死亡诗充,警方通過查閱死者的電腦和手機苍蔬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝴蜓,“玉大人碟绑,你說我怎么就攤上這事【ソ常” “怎么了格仲?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诵冒。 經(jīng)常有香客問我凯肋,道長,這世上最難降的妖魔是什么汽馋? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任侮东,我火速辦了婚禮,結(jié)果婚禮上豹芯,老公的妹妹穿的比我還像新娘悄雅。我一直安慰自己,他們只是感情好铁蹈,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布宽闲。 她就那樣靜靜地躺著,像睡著了一般握牧。 火紅的嫁衣襯著肌膚如雪容诬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天沿腰,我揣著相機與錄音览徒,去河邊找鬼。 笑死矫俺,一個胖子當(dāng)著我的面吹牛吱殉,可吹牛的內(nèi)容都是我干的掸冤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼友雳,長吁一口氣:“原來是場噩夢啊……” “哼稿湿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起押赊,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饺藤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后流礁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕俗,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年神帅,在試婚紗的時候發(fā)現(xiàn)自己被綠了再姑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡找御,死狀恐怖元镀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霎桅,我是刑警寧澤栖疑,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站滔驶,受9級特大地震影響遇革,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揭糕,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一萝快、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧插佛,春花似錦杠巡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚌铜。三九已至锨侯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冬殃,已是汗流浹背囚痴。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留审葬,地道東北人深滚。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓奕谭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痴荐。 傳聞我的和親對象是個殘疾皇子血柳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容