P1757 通天之分组背包题解
【题目链接】
洛谷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 通天之分组背包题解相关推荐
- 【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵
洛谷 P5020货币系统 https://www.luogu.com.cn/problem/P5020 思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第 ...
- 洛谷 P1757 通天之分组背包
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- 洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- P1757 通天之分组背包
P1757 通天之分组背包 背包中的经典问题,我竟然不知道. 分组背包 就是每个物品有一个所属的小组,小组内的物品会冲突. 就是把01背包中的两个for换一下位置 01: for(i,1,kind) ...
- 【题解】luogu P1757 通天之分组背包
分组背包类型 总结: 1.先循环体积,再循环每组内的物品,保证每组物品内只选一次. 若调换位置,有可能每组内物品多选了. 2.num数组记录每组有多少个物品: belong数组记录每组物品的每一个物品 ...
- 洛谷 p1757 通天之分组背包(哈希,分组背包)2021-08-12
题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 01 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品相互 ...
- 洛谷P1757 通天之分组背包
题目链接:点击进入 思路 分组背包,套板子 代码 #include<iostream> #include<string> #include<map> //#incl ...
- P1757 通天之分组背包(动态规划 分组背包)
思路:这就是一个分组背包的模板题 #include <bits/stdc++.h> using namespace std; int v,n,t; int x,tot=0; int g[2 ...
- 洛谷 P1757 通天之分组背包 C++ dp
题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 0101 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品 ...
最新文章
- SQL Server基础
- curl: (7) couldn‘t connect to host 解决方法
- QT-qevent 事件的accept()和ignore()
- C++ 详解拷贝构造函数
- React开发(128):ant design学习指南之input中addonBefore
- Android自定义柱状图表效果
- 微信支付携手云闪付APP上线支付立减新优惠
- web后端语言_web前端学习路线图_快速入门web前端学习路线图
- Confluence 6 重新获得附件指南
- 应用安全设计规范--模板
- Vue框架学习笔记一
- linux设置硬盘启动顺序,电脑双硬盘双系统启动的顺序调整及设置方法
- Makfile: [ GCC编译选项 ] >CFLAGS参数 -c -o
- python 拉丁超立方抽样
- 中国的操作系统都有哪些?
- PHP 递归函数的三种实现方式
- 【汽车配件管理系统-管理员-配件管理模块】配件管理分类
- clang: warning: argument unused during compilation: ‘-no-pie‘ [-Wunused-command-line-argument]
- 你必须知道的互联网协议详解
- ARM Linux QT虚拟键盘的系列问题
热门文章
- MySQL数据库的基本管理操作
- 中文停用词表整理(1893个)
- java8 lamda表达式相等_java8之lambda表达式(lambda表达式语法)
- Spire操作word文档
- Visual Studio 2008项目打包问题——项目太大C盘空间不够怎么办?
- 计算机视觉入门(包含论文学习网址)
- 电脑同步控制android设备,Total Control 免费使用电脑同时控制多台手机的教程及使用方法...
- 能耗在线监测系统在酒店节能管理中的应用
- php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
- CPU-Z查看内存条信息