每次用一个 f [ i , j ] f[i, j] f[i,j],然后去枚举一下这一组的每一个物品,分别计算选每一个的值然后每次取最大值,在此之前先赋初值为不选的值也就是 f [ i − 1 , j ] f[i - 1, j] f[i−1,j],然后去比较选的最大值,但是如果是一维滚动数组的话则不需要有这一步,不赋值时就是不选的价值。

//一维
// #include <iostream>
// #include <cstring>
// #include <algorithm>// using namespace std;// const int N = 1005;
// int n, m;
// int f[N], 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 = 1; j <= s[i]; j ++ )
//         {//             cin >> v[i][j] >> w[i][j];
//         }
//         for (int j = m; j >= 0; j -- )
//         {//             for (int k = 0; k <= s[i]; k ++ )//枚举一下这一组里的所有物品,看看加哪个多,因为去掉当前物品后的体积是没有更新过的
//             {//                 if (j >= v[i][k]) f[j] = max(f[j], f[j - v[i][k]] + w[i][k]);
//             }
//         }
//     }
//     cout << f[m];
//     return 0;
// }//二维
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1005;
int n, m;
int f[N][N], 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 = 1; j <= s[i]; j ++ ){cin >> v[i][j] >> w[i][j];}for (int j = 0; j <= m; j ++ ){f[i][j] = f[i - 1][j]; //不选for (int k = 0; k <= s[i]; k ++ )//枚举一下这一组里的所有物品,看看加哪个多,因为去掉当前物品后的体积是没有更新过的{if (j >= v[i][k]) f[i][j] = max(f[i][j], f[i - 1][j - v[i][k]] + w[i][k]);}}}cout << f[n][m];return 0;
}

每组物品放进来枚举,用的是上一层的数据,所以不会出现串联。

分组背包(每组背包选一个物品)相关推荐

  1. 01背包,完全背包,多重背包,分组背包的使用条件以及代码模板

    背包问题算是动态规划中的入门题目了,背包问题有很多种.背包九讲中讲的很清楚,我就不班门弄斧了,针对几种比较常见的背包问题,阐述一下它的使用前提和代码模板. 1.01背包问题 题目 有N 件物品和一个容 ...

  2. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数

    1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​.求解将哪些物品装入背包,可使这些物品 ...

  3. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  4. [USACO 2009 Dec G]Video Game Troubles-----分组背包的改良版

    这题是分组背包的改良版,如果还按分组背包的思路枚举每组物品状态会TLE 因此需要换一种思考方式 类似于状态机模型 状态表示 f[i]表示前i-1里任意选,但是选第i个物品的最大价值 g[i]表示前i个 ...

  5. [过游戏保护]之第一讲[背包、怪物、技能地面物品、任务、队友、装备、宠物、周围玩家]

    相信很多成天在网上混的朋友都有想自己做WG乃至自己卖自己做的WG的这类想法 各类网络培训班钱都交的不少 到头来才发现特么的啥也米学到... 这里是C++版块技术交流区 特别基础的东东俺就不说了 直接进 ...

  6. Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏

    本次我们来介绍一下如何创建一个基础物品: 演示包名:com.Joy187.newmod (之后都简称为包名) 1. 新建 -> 创建一个 包名.init 包 2.在刚刚创建的init包中新建一个 ...

  7. 模拟商城的购物过程Java_编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。...

    需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 5 个订单同时提交,生成唯 ...

  8. 背包——变向背包(hdu2546,1114,1203,2189)

    *本篇讲述一些可以根据背包的思路解决的一些例题. 如对01背包.多重背包.完全背包等不理解的同学请参考前几篇博客~ 题目链接: http://acm.hdu.edu.cn/showproblem.ph ...

  9. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

最新文章

  1. Apache2 httpd.conf 配置详解(一)
  2. 【GAN优化】详解对偶与WGAN
  3. 关于异常捕获和Checked Exception
  4. 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
  5. DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)
  6. 一文了解分而治之和动态规则算法在前端中的应用
  7. Day 3 in India
  8. 如何设置照片的高度没有滚条_基金定投选几只合适,如何设置止盈止损,有没有好的组合推荐?...
  9. Boyer-Moore 投票算法
  10. jquery post java对象_jquery $.post()返回数据
  11. 新ssd硬盘怎么安装efi_如何在PC中升级和安装新的硬盘驱动器或SSD
  12. 案例|工业物联网解决方案•生产数据可视化
  13. CSDN钱包提现协议
  14. safari html5 自动全屏,IOS10全屏safari Javascript
  15. 一个关于创业不错的博客
  16. php 判断非负整数,PHP-检测负数
  17. 效率篇-定时任务管理系统,替代crontab
  18. 小米频繁投资内容渠道 是回归理性还是曲线救赎
  19. 【搜索】单词方阵 luogu-1101
  20. 财报数据知冷暖:欧洲电信市场整体复苏中

热门文章

  1. 什么样的日志才是好日志
  2. 数字图像处理-空间域图像增强(一)(图像反转,对数变换,幂次变换、分段线性变换)
  3. Java split函数
  4. android日期函数前加0,Android手机开发:日期函数之判断某日期格式是否之前+计算某日期之前N天或之后N天的日期...
  5. oracle 默认escape_oracle escape用法
  6. vc_runtimeMinimum_x64.msi 找不到的解决方法microsoft
  7. linux下进程监控6,系统运维|Linux系统监控神器-Collectl
  8. tensorflow的freeze graph及inference graph_transforms
  9. 全渠道后端 : RFID在仓储物流中的运用
  10. debian的几个lib源_Debian源