【题目链接】

洛谷P1757

【解题思路】

和题目名一样,本题就是一道分组背包的模板题,我来讲一下分组背包。
其实就是先将说有的数据按照题意分组,再做01背包即可。

【CODE】

#include<iostream>
using namespace std;
int n,m,maxn;
struct name
{int x,y,z;
}a[10100];
name G[1010][1010];//G[i][j]代表第i组的第j个
int num[1010];//num[i]代表第i组的元素个数
int d[10100];//01背包
int main()
{cin>>n>>m;for (int i=1;i<=m;i++){cin>>a[i].x>>a[i].y>>a[i].z;//实现一个分组的操作num[a[i].z]++;G[a[i].z][num[a[i].z]].x=a[i].x;G[a[i].z][num[a[i].z]].y=a[i].y;maxn=max(a[i].z,maxn);//总组数}for (int i=1;i<=maxn;i++)//比01多一重第几组的循环for (int j=n;j>=0;j--)//每组都只能选一个,如果完全按照01大会多选,所以要将这两重循环反过来for (int k=1;k<=num[i];k++)if (j>=G[i][k].x)//把判断条件移到这里来d[j]=max(d[j],d[j-G[i][k].x]+G[i][k].y);//01背包cout<<d[n];return 0;
}

【后置知识】

我们所知的所有背包都是可以转化成01背包来做的。
例如:
完全背包

10
2 3 4

我们可以将其转化成

10
2 2 2 2 2 3 3 3 4 4

来做01背包
但是当背包容量很大时,我们会发现这样子的效率太低了。
怎么办呢?
我们可以利用二进制优化。
例如:

100
1

我们拆的时候可以拆成

100
1 2 4 8 16 32 37

这样我们也可以用这 777 个数,来表示 111 到 100100100 的所有数,大大提升了01背包的效率。

P1757 通天之分组背包题解相关推荐

  1. 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵

    洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...

  2. 洛谷 P1757 通天之分组背包

    P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...

  3. 洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]

    P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...

  4. P1757 通天之分组背包

    P1757 通天之分组背包 背包中的经典问题,我竟然不知道. 分组背包 就是每个物品有一个所属的小组,小组内的物品会冲突. 就是把01背包中的两个for换一下位置 01: for(i,1,kind) ...

  5. 【题解】luogu P1757 通天之分组背包

    分组背包类型 总结: 1.先循环体积,再循环每组内的物品,保证每组物品内只选一次. 若调换位置,有可能每组内物品多选了. 2.num数组记录每组有多少个物品: belong数组记录每组物品的每一个物品 ...

  6. 洛谷 p1757 通天之分组背包(哈希,分组背包)2021-08-12

    题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 01 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品相互 ...

  7. 洛谷P1757 通天之分组背包

    题目链接:点击进入 思路 分组背包,套板子 代码 #include<iostream> #include<string> #include<map> //#incl ...

  8. P1757 通天之分组背包(动态规划 分组背包)

    思路:这就是一个分组背包的模板题 #include <bits/stdc++.h> using namespace std; int v,n,t; int x,tot=0; int g[2 ...

  9. 洛谷 P1757 通天之分组背包 C++ dp

    题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 0101 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品 ...

最新文章

  1. SQL Server基础
  2. curl: (7) couldn‘t connect to host 解决方法
  3. QT-qevent 事件的accept()和ignore()
  4. C++ 详解拷贝构造函数
  5. React开发(128):ant design学习指南之input中addonBefore
  6. Android自定义柱状图表效果
  7. 微信支付携手云闪付APP上线支付立减新优惠
  8. web后端语言_web前端学习路线图_快速入门web前端学习路线图
  9. Confluence 6 重新获得附件指南
  10. 应用安全设计规范--模板
  11. Vue框架学习笔记一
  12. linux设置硬盘启动顺序,电脑双硬盘双系统启动的顺序调整及设置方法
  13. Makfile: [ GCC编译选项 ] >CFLAGS参数 -c -o
  14. python 拉丁超立方抽样
  15. 中国的操作系统都有哪些?
  16. PHP 递归函数的三种实现方式
  17. 【汽车配件管理系统-管理员-配件管理模块】配件管理分类
  18. clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]
  19. 你必须知道的互联网协议详解
  20. ARM Linux QT虚拟键盘的系列问题

热门文章

  1. MySQL数据库的基本管理操作
  2. 中文停用词表整理(1893个)
  3. java8 lamda表达式相等_java8之lambda表达式(lambda表达式语法)
  4. Spire操作word文档
  5. Visual Studio 2008项目打包问题——项目太大C盘空间不够怎么办?
  6. 计算机视觉入门(包含论文学习网址)
  7. 电脑同步控制android设备,Total Control 免费使用电脑同时控制多台手机的教程及使用方法...
  8. 能耗在线监测系统在酒店节能管理中的应用
  9. php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  10. CPU-Z查看内存条信息