分组背包(每组背包选一个物品)
每次用一个 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;
}
每组物品放进来枚举,用的是上一层的数据,所以不会出现串联。
分组背包(每组背包选一个物品)相关推荐
- 01背包,完全背包,多重背包,分组背包的使用条件以及代码模板
背包问题算是动态规划中的入门题目了,背包问题有很多种.背包九讲中讲的很清楚,我就不班门弄斧了,针对几种比较常见的背包问题,阐述一下它的使用前提和代码模板. 1.01背包问题 题目 有N 件物品和一个容 ...
- 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数
1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi,价值是 wiw_iwi.求解将哪些物品装入背包,可使这些物品 ...
- 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包
动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...
- [USACO 2009 Dec G]Video Game Troubles-----分组背包的改良版
这题是分组背包的改良版,如果还按分组背包的思路枚举每组物品状态会TLE 因此需要换一种思考方式 类似于状态机模型 状态表示 f[i]表示前i-1里任意选,但是选第i个物品的最大价值 g[i]表示前i个 ...
- [过游戏保护]之第一讲[背包、怪物、技能地面物品、任务、队友、装备、宠物、周围玩家]
相信很多成天在网上混的朋友都有想自己做WG乃至自己卖自己做的WG的这类想法 各类网络培训班钱都交的不少 到头来才发现特么的啥也米学到... 这里是C++版块技术交流区 特别基础的东东俺就不说了 直接进 ...
- Minecraft 1.12.2模组开发(三) 创建一个物品(item)+物品栏
本次我们来介绍一下如何创建一个基础物品: 演示包名:com.Joy187.newmod (之后都简称为包名) 1. 新建 -> 创建一个 包名.init 包 2.在刚刚创建的init包中新建一个 ...
- 模拟商城的购物过程Java_编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。...
需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 5 个订单同时提交,生成唯 ...
- 背包——变向背包(hdu2546,1114,1203,2189)
*本篇讲述一些可以根据背包的思路解决的一些例题. 如对01背包.多重背包.完全背包等不理解的同学请参考前几篇博客~ 题目链接: http://acm.hdu.edu.cn/showproblem.ph ...
- 01背包输出路径、完全背包、多重背包
背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...
最新文章
- Apache2 httpd.conf 配置详解(一)
- 【GAN优化】详解对偶与WGAN
- 关于异常捕获和Checked Exception
- 合工大计算机研究生毕业工资,合肥工业大学2019届薪酬统计
- DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)
- 一文了解分而治之和动态规则算法在前端中的应用
- Day 3 in India
- 如何设置照片的高度没有滚条_基金定投选几只合适,如何设置止盈止损,有没有好的组合推荐?...
- Boyer-Moore 投票算法
- jquery post java对象_jquery $.post()返回数据
- 新ssd硬盘怎么安装efi_如何在PC中升级和安装新的硬盘驱动器或SSD
- 案例|工业物联网解决方案•生产数据可视化
- CSDN钱包提现协议
- safari html5 自动全屏,IOS10全屏safari Javascript
- 一个关于创业不错的博客
- php 判断非负整数,PHP-检测负数
- 效率篇-定时任务管理系统,替代crontab
- 小米频繁投资内容渠道 是回归理性还是曲线救赎
- 【搜索】单词方阵 luogu-1101
- 财报数据知冷暖:欧洲电信市场整体复苏中
热门文章
- 什么样的日志才是好日志
- 数字图像处理-空间域图像增强(一)(图像反转,对数变换,幂次变换、分段线性变换)
- Java split函数
- android日期函数前加0,Android手机开发:日期函数之判断某日期格式是否之前+计算某日期之前N天或之后N天的日期...
- oracle 默认escape_oracle escape用法
- vc_runtimeMinimum_x64.msi 找不到的解决方法microsoft
- linux下进程监控6,系统运维|Linux系统监控神器-Collectl
- tensorflow的freeze graph及inference graph_transforms
- 全渠道后端 : RFID在仓储物流中的运用
- debian的几个lib源_Debian源