分组背包原理

简介: 笔记

分组背包


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

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]);
      }
    }
  }
目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
大语言模型的应用探索—AI Agent初探!
大语言模型的应用探索—AI Agent初探!
222 0
|
9月前
|
人工智能 监控 前端开发
《C++ 与 JavaScript 携手:前端人工智能的创新融合之道》
在数字化时代,人工智能技术正迅速渗透至前端开发,C++与JavaScript的融合为前端智能化开辟新路径。C++的高效计算与JavaScript的灵活交互相结合,通过WebAssembly等技术,实现了复杂任务处理与用户界面的无缝对接,为智能图像识别、语音助手等应用提供了强大支持。面对开发复杂性和兼容性挑战,两者的深度融合仍需持续探索与优化。
130 26
|
安全 Java 编译器
synchronized同步锁 : 原理到锁升级及历史演进的解析
synchronized同步锁 : 原理到锁升级及历史演进的解析
|
API Swift C语言
探索iOS开发:Swift中的异步编程与GCD应用
【8月更文挑战第4天】在iOS开发的海洋中,掌握Swift语言的航向是至关重要的。本文将引领你深入理解Swift中的异步编程概念,并借助Grand Central Dispatch(GCD)这一强大的工具,来简化并发编程的复杂性。我们将通过实际代码示例,展现如何在iOS应用中高效地管理后台任务和提升用户界面的响应性。
180 3
|
设计模式 运维 测试技术
业务单据进行领域驱动设计的最佳实践
本文是一篇DDD的最佳实践文章,读者也可以认为本文类似在介绍一种多字段单据的设计模式,整个文章会以一个简单版的电商购物背景作为一个领域上下文,过程中注重介绍领域组件的形成过程,同时会重点突出DDD的核心点。
可以使用 UNION 或者 UNION ALL 来合并多个 SELECT 语句的结果
可以使用 UNION 或者 UNION ALL 来合并多个 SELECT 语句的结果
333 7
|
前端开发 JavaScript 搜索推荐
《VitePress 简易速速上手小册》第4章 博客功能增强(2024 最新版)
《VitePress 简易速速上手小册》第4章 博客功能增强(2024 最新版)
324 0
|
存储 缓存 Java
WeakMap 和 WeakSet:解决内存泄漏&避免循环引用(下)
WeakMap 和 WeakSet:解决内存泄漏&避免循环引用(下)
WeakMap 和 WeakSet:解决内存泄漏&避免循环引用(下)
|
存储 Unix 编译器
C++中虚函数和纯虚函数的问题总结
C++中虚函数和纯虚函数的问题总结
305 0