Acwing 9.分组背包问题

题目链接

题目描述

有 N 组物品和一个容量是 V 的背包。
每组物品有若干个,同一组内的物品最多只能选一个。
每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。
求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。
输出最大价值。

题目模型

  • 集合表示:f(i,j)
  • 集合含义:所有从前i组物品中选,且总体积不大于j的所有选法
  • 集合属性:max
  • 集合划分:枚举第i组物品选哪个(完全背包枚举第i组背包选几个)
    Acwing 9.分组背包问题

题目代码

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;

int n, m;
int v[N][N], w[N][N], s[N];
int f[N];

int main()
{
    cin >> n >> m;

    for (int i = 1; i <= n; i ++ ) { cin>> s[i];
        for (int j = 0; j < s[i]; j ++ )
            cin >> v[i][j] >> w[i][j];
    }

    for (int i = 1; i <= n; i ++ ) for (int j="m;">= 0; j -- )
            for (int k = 0; k < s[i]; k ++ )
                if (v[i][k] <= j) f[j]="max(f[j]," f[j - v[i][k]] + w[i][k]); cout << f[m] endl; return 0; } < code></=></=></=></algorithm></iostream>

Original: https://www.cnblogs.com/esico/p/16368077.html
Author: esico
Title: Acwing 9.分组背包问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619913/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球