分组背包原理

简介: 笔记

分组背包


类似多重背包,只是将每件物品选几个变成每组物品选哪一个

9.png



所以优化成一维时需要从大到小枚举j

int n, m;
int f[N];
int v[N][N], w[N][N], s[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;j >= 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]);
      }
    }
  }
目录
相关文章
|
7月前
|
存储 人工智能 算法
【算法分析与设计】动态规划(下)(一)
【算法分析与设计】动态规划(下)
|
8月前
|
算法
贪心算法的思路和典型例题
贪心算法的思路和典型例题
|
算法 C++
|
算法
|
人工智能 算法
|
存储 算法 C++
算法基础系列第五章——动态规划之背包问题(1)
算法基础系列第五章——动态规划之背包问题(1)
117 0
算法基础系列第五章——动态规划之背包问题(1)
|
算法 C++
算法基础系列第五章——动态规划之背包问题(2)
算法基础系列第五章——动态规划之背包问题(2)
54 0
算法基础系列第五章——动态规划之背包问题(2)