POJ 3132 双约束背包问题

[算法][动态规划][背包问题①]0-1背包问题的优化及约束变形[python实现] 这是我对动态规划一些入门题的笔记,主要便于随时随地的回顾这些基础内容。 阅读详情

    多重背包的问题是,给定物品,且有物品的数量限制,问方法种类或者最大的容量等,这里的限制是限制在物品上;

    另外一种约束是限制在背包上,即:背包最多可以装k种物品,每种物品都是无限的(完全)的,问有多少种背包方式。或者说,这里的背包有两重的约束,即背包的容量以及背包最多能装的物品的个数都有限制,不妨成为“双约束背包”。

    这种背包问题的思考方式是这样的:用两维背包,package[a][b],其中a是背包的最大容量,b是背包最多能装的数量,两个都进行约束之后,背包策略如下:

    对于每一种物品,进行完全背包,对于背包容量为j的情况,考察它由b,b-1,b-2,…,1个物品构成,其递归式子为package[j][k]+=package[j-wt[i]][k-1];这里需要注意到是,背包的顺序,是从b倒序到1,也可以从1升序到b,为什么两者没有区别呢?

  1. #include <algorithm>
  2. #include <numeric>
  3. #include <cmath>
  4. #include <iostream>
  5. #include <cstdio>
  6. #include <iomanip>
  7. #include <vector>
  8. using namespace std;
  9. int primes[187],n=0;
  10. bool isPrime[1120];
  11. int package[1121][15];
  12. void getPrime()
  13. {
  14.     int t;
  15.     memset(isPrime,-1,sizeof isPrime);
  16.     for (int i=2;i<1120;++i)
  17.     {
  18.         if(isPrime[i]) primes[n++]=i;
  19.         for (int j=0;j<n && (t=i*primes[j])<1120;++j)
  20.         {
  21.             isPrime[t]=false;
  22.             if(i%primes[j]==0) break;
  23.         }
  24.     }
  25. }
  26. int main()
  27. {
  28.     getPrime();
  29.     int a,b;
  30.     while (scanf("%d%d",&a,&b))
  31.     {
  32.         if(!a && !b) break;
  33.         memset(package,0,sizeof package);
  34.         package[0][0]=1;
  35.         for (int i=0;i<187 && primes[i]<=a;++i)
  36.             for (int j=a;j>=primes[i];--j)
  37.                 for (int k=1;k<=b;++k)
  38.                 package[j][k]+=package[j-primes[i]][k-1];
  39.         printf("%d/n",package[a][b]);
  40.     }
  41.     return 0;
  42. }
背包相关问题 背包问题是一种经典的组合优化问题,通常表述为:给定一组物品,每种物品有一个重量和一个价值,以及一个容量有限的背包。以0/1背包问题为例,可以定义一个二维数组dp[i][w] 表示在前 i 个物品中,背包容量为 w 时能获得的最大价值。解释:在物品 i 的决策时刻,可以选择不取该物品(保留前 i−1 个物品的最大价值),或者取该物品(牺牲 wi​ 容量,加上物品 i 的价值)。的函数,它接受物品的重量列表、价值列表以及背包容量作为参数,返回能装入背包的最大价值。通过双重循环计算出每一项。即为所求的最大价值。 阅读详情

相关推荐

0-1背包问题(双限制条件)

给定n种物品和一个背包。物品i的重量是wi,体积是bi,其价值为vi,背包的容量为c,容积为d。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品只有两个选择:装入或不装入,且不能重复装入。输入数据的第一行分别为:背包的容量c,背包的容积d,物品的个数n。接下来的n行表示n个物品的重量、体积和价值。输出为最大的总价值。 输入样例: 20 15 3 11 7 9 9 5 10 7 10 5 输出样例 ...

LoveLuoTianyi的博客 2074

二维费用的背包问题(背包有体积和重量两个限制)

分析:每个物品只能用1次,是典型的01背包问题。因此,只是在01背包的基础上增加了一个重量的循环。题目描述:有 N件物品和一个容量是 V的背包,背包能承受的最大重量是M。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。第一行三个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。

evildoerxmf的博客 793

动态规划求解二重约束的0-1背包问题c++

实现二重约束的背包问题c++代码: /**输入参数: * @param m 表示背包的最大容量 * @param m 表示背包的最大质量 * @param n 表示商品个数 * @param a[] 每个商品的容量 * @param b[] 每个商品的质量 * @param p[] 每个商品的价值 */ /**输出: 求最大商品value*/

二重限制的01背包 最优解及其最优解的方案数

http://49.235.120.161/problem/10031 题意:N个物品 选每个物品i 将用时si+di 花费vi元 获得价值为1 问N个物品 总时间为T 钱包有M元 获得的最大价值Ans与Ans的方案数 N<=1000 T,M<=100 正着做: ll dp[1005][105][105]; 前i个物品 花时间至多j,花钱至多k的最大价值 l...

animalcoder 651

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2249

【AGC】【serverless】【云函数】云函数常见问题

1、云函数添加了AUTH触发器后,在用户执行注册、销户、登录、登出动作时,云函数的event对象会自动触发返回相应信息。比如我在“层”的压缩包里放了config/config.txt,那么我在云函数里怎么调用这个文件?层的目录是:/dcache/layer,函数的目录是/dcache/layer/func。在云函数里往云数据库里插入数据返回的是180000,这是正常吗?已经按照文档在后台对应的云函数里配置了,所需的AUTH触发器。层的用法和放在函数里的用法是相同的。云函数里的层如何调用?

华为开发者联盟 839

动态规划2-背包问题

背包问题

zhuo123110的博客 480

【重磅干货】介质损耗因数(tanδ)揭秘:如何精准定位材料劣化最严重的温度?附权威研究PDF!

是评估绝缘材料性能的核心指标,能直接反映材料内部能量损耗和微观结构变化。通过分析tanδ-温度曲线的峰值点,可精准定位材料劣化最严重的温度。:极化损耗峰值的温度点(如环氧树脂的80℃)是材料性能拐点,需重点关注!:图3对比了5种材料的tanδ-温度曲线,峰值温度差异高达50℃!在电力设备、电子元器件等领域,材料的老化与温度密切相关。:[《介质损耗峰值温度在设备寿命预测中的应用》]在不同温度下测量tanδ,绘制曲线图。:[《多材料介质损耗峰值温度对比研究》]:基于tanδ峰值温度开发的。

mubiao05的博客 1350

装备运输(01背包&双限制)

因此,朱可夫元帅要求你立即从远东的军工厂运输大量装备支援库尔斯克前线。列车司机告诉你,一趟列车最多可以容纳。同时,军工厂仓库提供给你一份装备清单,详细记录了每件装备的体积、重量和火力。为了有效支援朱可夫元帅,你要找到一种方案,使得总火力值最大。体积的武器装备,但是你可能不能装满,因为列车承受不了那么大的重量,一趟列车最多可以承载。德国放松对英国的进攻后,把矛头指向了东边——苏联。年初,东线的战斗进行到白热化阶段。输出一个数,表示可能获得的最大火力值。,表示各装备的火力值、体积和重量。,表示最大体积和重量。

陈进士学习的博客 1196

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1119

智能织梦:基于Rokid AR眼镜的家庭情感记忆增强系统设计与实践

本文介绍了基于Rokid AR眼镜的'智能织梦'系统,通过增强现实技术捕捉和重现家庭情感记忆。系统利用多模态传感器和轻量级情感识别模型,自动记录家庭互动中的情感峰值时刻,并生成沉浸式记忆片段。测试数据显示,该系统显著提升了家庭情感互动的频率和质量,特别适用于多代同堂家庭和记忆唤醒场景。

sre5engineer的博客 536

poj 3132 Sum of Different Primes(01背包)

题目大意: 给你两个数n和m,求有多少种方式,使得m个不同的素数和为n。当n = 24  m = 3  的时候,只有二种  {2, 3, 19} and {2, 5, 17}。 解题思路: 因为题目给的n和m都比较小,所以可以暴力求解。 因为每个在集合里每个素数只能出现一次,这个特性符合01背包问题。设:dp[i][j] 表示 和为 i 并且 有 j 个素数组成的方法数。 很明显,d

Gavin的专栏 923

【学习记录】IIC驱动ICM42670+卡尔曼滤波+四元数姿态角解算

ICM42670陀螺仪可以使用iic驱动,单片机平台使用GD32f305VE。

liarsup的博客 8265

二维背包动态规划问题——两个约束

问题需求:跟定多个区域,一个区域拥有固定的收派件量,需要分配小哥进行收派,每个小哥有收派量上限,以及保底成本,当一个区域的收派量没有全部完成,剩余的件会有相应的惩罚成本 目标:调度使成本最小 由于涉及三维度的优化问题,此篇主要记录单个区域调度最优情况,类比二维背包问题,两个约束,dp初始化为成本最大值,放入小哥的value为小哥的节约成本,并打印出分配结果。 import pandas as pd import json import gc df_xiaoge = pd.read_csv("./小

DoubleBear的博客 1210

FLAC3D数值三轴测试

本文介绍了使用FLAC3D进行数值三轴测试的命令流程。通过建立圆柱体模型,设置Mohr-Coulomb本构模型及材料参数,施加边界条件和荷载,并定义Fish函数监测应变和应力。命令包括模型创建、网格划分、材料属性定义、边界约束、荷载施加以及结果监测等步骤。该流程可用于模拟岩土材料在三轴条件下的力学响应,为数值分析提供参考。完整代码可从指定链接下载获取。

qq_36980284的博客 99

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1430

0-1多背包带约束问题(MKAR)

本文其实与智能算法无关,这是最优化课程的一个小作业,之所以放在智能算法一栏,是因为这个问题的大部分解法都是智能算法。下面出场的是背包问题的一个变种——带约束的多背包问题,这个问题的精确算法复杂度极高,所以一般退而求其次寻找拥有固定近似比的近似算法,本文求解采取的则是一种基于DP动态规划的近似算法,巧妙的并不是算法本身,算法也不能保证求出最优解,精华在于近似比的证明部分,这一部分证...

weixin_52435933的博客 1792

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

POJ-3132(一个数能表示成至多k个素数的和的种类数)(Sum of Different Primes )

又是动态规划 int ans[1125][15] = {0}; int main() { int n, k, prim[1000], i, x = 0, len = 187, j; int d[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107, 109,1

famousDT的专栏 884

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

多重背包问题 I

有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入格式 第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。 接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。 输出格式 输出一个整...

刘猿猿 648

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【动态规划】背包问题 {01背包问题;完全背包问题;二维费用背包问题}

【动态规划】背包问题 {01背包问题;完全背包问题;二维费用背包问题}

52Herzt的博客 5527

动态规划问题详解(二)

在动态规则问题详解(一)中,我们用1,3,5三个硬币,求用最少的硬币组成11元的问题。这一节,我们来讨论一个复杂一点的问题。这个问题,曾经是某公司的面试题。    有从1-N个连接的整数,把1-N个整个划分为二个相等的集合,问有几种划分的方法。        如  {1,2,3},则有{1,2}和{3},只有一种划分方法。        如{1,2,3,4,5,6,7} 则有  {1,

majinfei的专栏 898

背包问题丨蛮力法、回溯法、分支限界法、贪心法方案

背包问题(蛮力法、回溯法、分支限界法、贪心法)

c_QFy_17的博客 1355

动态规划背包问题

动态规划背包问题是一类经典的优化问题,涉及到选择物品以最大化某个目标值(通常是价值或利润),同时受到某种约束(如重量、体积或时间)。背包问题可以分为多种类型,例如0-1背包问题、完全背包问题、多重背包问题等。在0-1背包问题中,每种物品只有一个,可以选择放或不放;在完全背包问题中,每种物品有无限个,可以选择放任意个;在多重背包问题中,每种物品有有限个,可以选择放任意个但不能超过给定的数量。

2301_80841939的博客 1169

背包九讲——九种背包问题的算法思路+代码分析

其实九种背包问题都是由01背包问题延伸而来,因为其他背包问题都是在01背包问题上加了一些其他条件或限制。只要01背包的思想完全掌握,那么在学习其他背包问题的时候都能够很快理解,在解决其他背包问题时基本只是在01背包基础上,增加一些判断,或是在01背包思想的基础上根据题目要求做出一些调整。因此本篇在刚开始介绍01背包的时候会花费较多笔墨,尽量保证大家能够理解01背包,接下来后面的背包问题就会只对于题目相对01背包作出的更改进行讲解。

鱼香rose_的博客 5125

背包问题(0/1背包、完全背包)

1.0/1背包 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品,每种物品有且只有一个,并且有权值和体积两个属性。在01背包问题中,因为每种物品只有一个,对于每个物品只需要考虑选与不选两种情况。如果不选择将其放入背包中,则不需要处理。如果选择将其放入背包中,由于不清楚之前放入的物品占据了多大的空间,需要枚举将这个物品放入背包后可能占据背包空间的所有情况。 状..

qq_59414216的博客 442

动态规划--0-1背包问题

问题描述: 有一个背包,它的容量为C(Capacity),现在有n种不同的物品,编号为0..n-1,其中每一件物品的重量为W(i),价值为v(i)。问可以向这个背包中盛放那些物品,使得在不超过背包容量的基础上,物品的总价值最大 使用递归解决问题的时候,要首先知道递归要解决怎样的问题,也就是说定义状态。首先有两个变量n个物品,容量为C的背包,所以: F(n,C)考虑将n个物品放进容量为C...

怪咖小青年的博客 473
上一篇: 算法员而非程序员
下一篇: 组合数奇偶性的判断
millky
博客等级 码龄20年 7粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值