zoukankan      html  css  js  c++  java
  • AcWing 10 有依赖的背包问题

    有 NN 个物品和一个容量是 VV 的背包。

    物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。

    如下图所示:
    QQ图片20181018170337.png

    如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。

    每件物品的编号是 ii,体积是 vivi,价值是 wiwi,依赖的父节点编号是 pipi。物品的下标范围是 1N1…N。

    求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。

    输出最大价值。

    输入格式

    第一行有两个整数 NVN,V,用空格隔开,分别表示物品个数和背包容量。

    接下来有 NN 行数据,每行数据表示一个物品。
    第 ii 行有三个整数 vi,wi,pivi,wi,pi,用空格隔开,分别表示物品的体积、价值和依赖的物品编号。
    如果 pi=1pi=−1,表示根节点。 数据保证所有物品构成一棵树。

    输出格式

    输出一个整数,表示最大价值。

    数据范围

    1N,V1001≤N,V≤100
    1vi,wi1001≤vi,wi≤100

    父节点编号范围:

    • 内部结点:1piN1≤pi≤N;
    • 根节点 pi=1pi=−1;

    输入样例

    5 7
    2 3 -1
    2 2 1
    3 5 1
    4 7 2
    3 6 2
    

    输出样例:

    11


    背包九讲中有依赖的背包问题


    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    const int maxn = 105;
    int N, V, p, root, ind=0;
    int v[maxn], w[maxn];
    int ch[maxn], nxt[maxn], pre[maxn];
    int dp[maxn][maxn];
    
    void add(int p,int i){
        ch[ind] = i;
        nxt[ind] = pre[p];
        pre[p] = ind++;
    }
    void dfs(int u){
        for(int i=pre[u];i!=-1;i=nxt[i]){
            int son = ch[i];
            dfs(son);
            for(int j=V-v[u];j>=v[son];j--)
                for(int k=v[son];k<=j;k++)
                    dp[u][j] = max(dp[u][j],dp[u][j-k]+dp[son][k]);
        }
        for(int i=V;i>=v[u];i--)
            dp[u][i] = dp[u][i-v[u]]+w[u];
        //for(int i=0;i<v[u];i++)
        //    dp[u][i] = 0;
    }
    int main(){
        memset(pre,-1,sizeof(pre));
        scanf("%d%d",&N,&V);
        for(int i=1;i<=N;i++){
            scanf("%d%d%d",&v[i],&w[i],&p);
            if(p==-1)
                root = i;
            else
                add(p,i);
        }
        dfs(root);
        printf("%d
    ",dp[root][V]);
        return 0;
    }
    View Code
  • 相关阅读:
    2016.5.11_经典试题-回文算法【ABAP】
    shell基础知识
    python笔记2
    python笔记1
    vmware rdm
    网页中图片显示方向与实际图片方向不一致
    vue 弹性布局 实现长图垂直居上,短图垂直居中
    IE10 解决input file 同一文件不触发onchange事件
    04. pt-deadlock-logger
    03. pt-config-diff
  • 原文地址:https://www.cnblogs.com/kongbb/p/11028992.html
Copyright © 2011-2022 走看看