背包集合

集合划分问题 Golang 动态规划 01背包 集合划分问题 Golang 动态规划 01背包 最长等差数列问题 Golang 暴力法 字母组合 Golang 验证IP地址 Golang 01背包问题,用一个set记录可能凑出来的值。超过所有数字之和的一半可以不用记录,因为必定有一个小于一半的互补的情况,可以得出一组最接近总和一半的值maxmaxmax,总和sum−maxsum-maxsum−max得较大的另一组的和,大的一组减小的一组得sum... 阅读详情

https://vjudge.net/problem/HDU-2191


多重背包:

可以将多重背包转化为01背包,具体想法是,对于第i个物品,它的数量为num[i] , 我们可以将它分为多独立的物品,即一个物品是k倍的第i个物品的质量和价值,数量为1。

这里运用二进制,将第i个物品分为 2^0 , 2^1 , 2^2 ... 2^(k-1) , num[i] - 2^k + 1  ,其中 2^k -1 = 2^0 + 2^1 +... +2^(k-1)。 所以其复杂度可以变为logΣnum[i]      




#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<queue>
#include<iomanip>
using namespace std;
const int INF = 0x3f3f3f3f;
const int NINF = 0xc0c0c0c0;

int main()
{
    int T;
    cin >> T;
    int dp[50000];
    int wei[50000],val[50000],num[50000];
    while(T--){
        memset(dp,0,sizeof(dp));
        int m,n;
        cin >> m >> n;
        for(int i=0;i<n;i++){
            cin >> wei[i] >> val[i] >> num[i];
        }
        int k = n;
        for(int i=0;i<n;i++){     //拆分物品
                int temp = 2;
                for(;;){
                    if((temp<<1)-1 <= num[i]){  
                        num[k] = 1;
                        wei[k] = temp*wei[i];
                        val[k] = temp*val[i];
                        k++;
                        temp <<= 1;
                    }
                    else break;
                }
                int res = num[i] - temp + 1;
                num[k] = 1;
                wei[k] = res*wei[i];
                val[k] = res*val[i];
                k++;

                num[i] = 1;
            }
        for(int i=0;i<k;i++){            01 背包
            for(int j=m;j>=wei[i];j--){
                dp[j] = max(dp[j],dp[j-wei[i]]+val[i]);
            }
        }
        cout << dp[m] << endl;
    }
}


P1466 [USACO2.2]集合 Subset Sums (dp,01背包) Sloution 将一个集合分为两部分,转换成1个背包,恰好装满sum/2的物品(sum &1==1,为奇数,不存在) ll f[10000];//不开long long见祖宗!! int a[45]; int main() { int n; cin >> n; f[0] = 1; a[1] = 1; _for(i, 2, n + 1) a[i] = a[i - 1] + i; //cout << a[n]; if(a[n]&1){ co. 阅读详情

相关推荐

A Mathematical Framework for Transformer Circuits—(二)

transformer数学理论框架

qq_42208244的博客 757

P1466 集合 Subset Sums(01背包)

题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的: {3} 和 {1,2} 这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数) 如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7...

邵光亮的博客 647

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案

本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。

water的专栏 1148

bitset 优化01背包 处理集合

好博客:https://www.cnblogs.com/cjjsb/p/9751384.html 例题1:Newcoder 132C 简单瞎搞题 题目链接:https://www.nowcoder.com/acm/contest/132/C 题意: 分析:核心就在于看作01背包的形式,枚举种类n,每个范围(L-R+1),以及所有的可能值 1~1e6, 然后直接做的话...

aolian4963的博客 1093

告别SquareLine!用免费的NXP GUI-Guider为海思3516AV300开发LVGL界面(附完整移植流程)

本文详细介绍了如何利用免费的NXP GUI-Guider工具为海思Hi3516AV300开发LVGL界面,包括环境配置、代码移植和性能优化等全流程实战指南。特别针对二维码组件缺失等常见问题提供解决方案,帮助开发者零成本构建高效嵌入式GUI系统。

weixin_28292761的博客 415

基于 FPGA Vivado 示波器设计(附源工程)

今天给大侠带来基于 FPGA Vivado 示波器设计,开发板实现使用的是Digilent basys 3,如有想要入手basys3开发板的,可以联系牛总:18511371833。话不多说,上货。 本篇掌握基于添加文件和IP的Vivado工程设计流程,掌握基于Tcl的Vivado工程设计流程,学习示波器的基本组成结构。获取本篇相关源工程代码,可在公众号内回复“示波器设计源工程”。 原理介绍 数字存储示波器能够将模拟信号进行采样、存储以及显示。本系统在DIGILENT ...

7385

HRBUST 1541 集合划分【01背包】

Description 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的:{3} 和 {1,2}这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数) 如果N=7,有四种方...

weixin_34268169的博客 112

SAP_PP模块中MRP中信号灯简介

一、信号灯的作用二、常见的信号灯颜色及含义三、信号灯的来源四、常见场景示例示例1:物料满足所有需求示例2:生产订单已延迟示例3:缺料或未产生计划订单五、相关事务码参考六、如何应对红色或黄色信号灯?七、前台操作说明在 SAP PP 模块中,**MRP(物料需求计划)运行结果中的“信号灯”是一种非常直观的可视化提示工具,用于帮助用户快速识别物料计划是否存在异常或需要关注的问题。这些信号灯通常出现在MD04(库存/需求清单)、MD05(单物料MRP清单)、MD07(MRP列表)**等事务代码的界面中。

我小时候很黑的博客 626

HLG 1541 集合划分【01背包】

题意: 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3, 对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的:{3} 和 {1,2} 给出一个 N 值,问最多能划分成多少种等值的集合。 分析:每个数字只用到一次,每种情况的存在数可以由之前的存...

weixin_34037515的博客 172

瑞芯微RK3588平台YOLOv8Pose模型RKNN部署与C++优化实战:从模型转换到高效推理的全流程指南-附源码

错误码 | 原因 | 解决方案 || -1001 | ONNX算子不支持 | 升级RKNN SDK至最新版 || -2003 | 量化校准数据不足 | 增加校准图片至500张 || -3005 | 输入尺寸不匹配 | 固定模型输入尺寸为640x640 || 资源消耗 | CPU 35% | NPU 90% |

m0_64661770的博客 989

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5436

P1466 集合 Subset Sums 搜索+递推+背包三种做法

题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的: {3} 和 {1,2} 这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数) 如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每...

日拱一卒,功不唐捐 2795

STM32入门教程:图像处理

然后,我们使用 STM32 的 DSP 模块中的 arm_mean_u8 函数计算原始图像的平均值,并将结果存储在 meanValue 变量中。然后,我们需要编写代码配置 STM32 的外部中断输入引脚,并在中断处理函数中读取 OV7670 摄像头模块输出的图像数据。然后,我们需要编写代码配置 STM32 的 USB OTG 接口,并在回调函数中读取 USB 摄像头输出的图像数据。一、图像采集 图像采集是图像处理的第一步,我们需要将外部图像源的数据导入到 STM32 中进行处理。

2401_85625565的博客 1616

背包、树的直径、集合划分

实质都在于找到相应的递推关系。 对于n种物体k1-kn,大小为K的背包问题来说,递推关系是:P(n, K) = P(n-1, K) || P(n-1, K-kn),也即,根据当前物体kn是不是被选中,来二分。 对于树的直径问题,记f(t)为以节点t为根的子树的直径,h(t)为以节点t为根的子树的高度,则 f(t) = max{ f(left), f(right), h(left) ...

a923304245的博客 127

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

集合划分差最小问题(01背包)

背包

Harris-H的博客 823

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C++背包】超级背包大集合

啊哈,经典的背包问题讲完了,这次呢,我们来总结一下背包问题,并整理程序。 总结 背包问题思路,就是将每一种放进去的情况都列举出来,并比较得到最优值,所以,就能求出最大值。这就是为什么背包问题中动态规划比普通递归要快,就是因为普通递归重复求了很多数值,而动态规划正好相反,把所有值存起来,对比值,求出,一般递归的时间复杂度是指数级,而动态规划基本上是平方级。 整理程序 (1) 01普通背包问题 ...

Lotuses的博客 1290

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

poj 3046 Ant Counting——多重集合的背包

题目:http://poj.org/problem?id=3046 多重集合的背包问题。 1.式子:考虑dp[ i ][ j ]能从dp[ i-1 ][ k ](max(0 , j - c[ i ] ) <= k <= j)转移来。   对于j<=c[ i ],这就是前缀和一样,所以dp[ i ][ j ] = dp[ i ][ j-1 ] + dp[ i-1 ][ j ]...

weixin_34019929的博客 123

一种隐式的背包问题(与数字或集合相关)

通俗易懂的一种01背包变形的讲解

qq_62940063的博客 352

蓝桥杯备考:特殊01背包问题——》集合subset

我们划分成两个集合,实际上我们只需要看一部分就行了,也就是从集合的所有元素里挑出恰好满足集合总和的一半儿,当然,如果我们的集合总和是奇数的话,我们是无论如何也挑不出刚好一半儿的,因为我们没有小数,然后这道题就变成了01背包问题,我们要从集合的所有元素里挑出恰好等于sum/2的所有搭配 由于我们选的是有重复的,最后结果要除2。step1 确定状态表达 f[i][j]表示从1到i的数里挑选出恰好等于j的搭配方案。step4:答案就是f[n][sum/2] /2。step2 推导状态转移方程。

2301_81772249的博客 276

hdu 6092 Rikka with Subset (集合计数,01背包)

Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:Yuta hasnpositiveA1−Anand th...

dddddd12345456的博客 126

再谈01背包 | 使用【跳跃点集合】代替【求解矩阵】解题

上文链接:9大背包第一弹 | 01背包 输入: 1 double []w={2,2,6,5,4}; 2 double []v={6,3,5,4,6}; 3 double weight=10; 4 _01package problem=new _01package(w,v,weig...

weixin_30551963的博客 560

背包问题集合

背包问题专项 1. 背包问题_无价值 题目描述 解题思路 源代码 题型分析 下次遇到此类题我要注意的地方 时间、空间复杂度 此类题模板代码 启发性或普适性 总结 2. 题目描述 解题思路 源代码 题型分析 下次遇到此类题我要注意的地方 时间、空间复杂度 此类题模板代码 题目描述 解题思路 源代码 题型分析 下次遇到此类题我要注意的地方 时间、空间复杂度 此类题模板代码 启发性或普适性 总结 题目描述 解题思路 源代码 题型分析 下次遇到此类题我要注意的地方 时间、空间复杂度 此类

qq_40092110的博客 902

背包模型题目集合

文章目录背包模型01背包AcWing 423. 采药AcWing 1024. 装箱问题Luogu 2925 干草出售Proud Merchants完全背包P1616 疯狂的采药P1853 投资的最大效益Piggy-Bank多重背包Luogu P1776 宝物筛选HDU 1059 Dividing混合背包P1833 樱花分组背包AreYouBusy 背包模型 01背包 AcWing 423. 采药 思路: 裸的01背包问题,在本题中我们将采药时间当作背包容量限制, dp[i][j]表示前i个草药用了j个时间的

qq_35975367的博客 521

【01背包】P1466 [USACO2.2] 集合 Subset Sums

要求两个子集合的数字和是相等的,就相当于给定了限制条件在1~n中挑数字。先分析状态表示,状态表示一般跟着题目要求什么来设置。本题要求划分方案数,那么我们的状态表示就设置成方案数。代码实现上,如果写的是二维的状态转移方程,由于“选”是有条件限制的,所以“选”和“不选”是分开讨论的。但是注意,题目要求的实际上是划分成两个子集合这样的方案有多少个,而我们的状态表示。如果写成一维的,由于将条件省略进了循环中,就可以写在一起。求的是有多少个数值和为sum/2的子集合,所以最后。感觉本题最难的难点就是想出用。

2301_80361697的博客 265
上一篇: poj3414 pots 倒水模拟
下一篇: A. 拼音魔法 ecnu
mwhybmj
博客等级 码龄10年 8粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值