多重背包原理

简介: 笔记

多重背包


每件物品的个数有限制


朴素算法

与完全背包的朴素算法类似 时间复杂度O ( N ∗ V ∗ S )

7.png



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

for (int i = 1;i <= n;++i) {
  for (int j = 0;j <= m;++j) {
    for (int k = 0;k * v[i] <= j && k <= s[i];++k) {
      f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]);
    }
  }
}


二进制优化8.png

int cnt = 0;
for (int i = 1;i <= n;++i) {
   int a, b, s;
   cin >> a >> b >> s;
   int k = 1;
   while (k <= s) {
    cnt++;
    v[cnt] = a * k;
    w[cnt] = b * k;
    s -= k;
    k *= 2;
   }
   if (s > 0) {
    ++cnt;
    v[cnt] = a * s;
    w[cnt] = b * s;
   }
}
n = cnt;
for (int i = 1; i <= n;++i) {
   for (int j = m;j >= v[i];--j) {
    f[j] = max(f[j], f[j - v[i]] + w[i]);
   }
}


目录
相关文章
|
6月前
|
算法 JavaScript
class074 背包dp-分组背包、完全背包【算法】
class074 背包dp-分组背包、完全背包【算法】
47 0
|
6月前
|
算法
class075 背包dp-多重背包、混合背包【算法】
class075 背包dp-多重背包、混合背包【算法】
64 0
|
存储 人工智能 算法
【算法分析与设计】动态规划(下)(一)
【算法分析与设计】动态规划(下)
|
1月前
|
存储 算法
|
存储 算法
【算法分析与设计】动态规划(下)(三)
【算法分析与设计】动态规划(下)
|
消息中间件 人工智能 算法
【算法分析与设计】动态规划(下)(二)
【算法分析与设计】动态规划(下)
|
算法
|
人工智能 算法