分组背包

有 N 件物品和一个容量为 V 的背包。第 i 件物品的费用是 Ci,价值是 Wi。这些
物品被划分为 K 组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包
可使这些物品的费用总和不超过背包容量,且价值总和最大。
使用一维数组的伪代码如下:
for k ← 1 to K
for v ← V to 0
for all item i in group k
F[v] ← max{F[v], F[v − Ci] + Wi}

http://acm.hdu.edu.cn/showproblem.php?pid=1712

#include 
#include
#include
#define Max(a,b) a>b?a:b
#define Min(a,b) a=0;j--)
            {
                for(int k=1;k<=m;k++)
                {
                    if(j-k>=0)
                    {
                        dp[j]=Max(dp[j],dp[j-k]+arr[g][k]);//第g组第k个物品花费为k
                    }
                }
            }
        }
        printf("%d\n",dp[m]);

    }

}

你可能感兴趣的:(分组背包)