传统的背包问题~3479:【例86.4】 混合背包

【题目描述】

一个旅行者有一个最多能装V�公斤的背包,现在有n�件物品,它们的重量分别是W1�1,W2�2,...,Wn��,它们的价值分别为C1�1,C2�2...Cn��。有的物品只可以取一次(0101背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

【输入】

第一行:二个整数,M�(背包容量,M≤200�≤200),N�(物品数量,N≤30�≤30);

第22..N+1�+1行:每行三个整数Wi��,Ci��,Pi��,前两个整数分别表示每个物品的重量,价值,第三个整数若为00,则说明此物品可以购买无数件,若为其他数字,则为此物品可购买的最多件数(P�)。

【输出】

仅一行,一个数,表示最大总价值。

【输入样例】

复制代码
10  3
2  1  0
3  3  1
4  5  4

【输出样例】

复制代码
11
cpp 复制代码
#include<bits/stdc++.h>//gezhengxu2024
using namespace std;
int W,n;
int w[35],v[35],c[35];
int dp[205]; 
int main()
{
	cin>>W>>n;
	int i,j,k;
	for(i=1;i<=n;i++)
	{
		cin>>w[i]>>v[i]>>c[i];
		if(c[i]==0)
		{
			c[i]=99999;
		}
	}
	for(i=1;i<=n;i++)
	{
		for(j=W;j>=w[i];j--)
		{
			for(k=1;k<=min(j/w[i],c[i]);k++)
			{
				dp[j]=max(dp[j],dp[j-k*w[i]]+k*v[i]);//gezhengxu2024
			}
		}
	}
	cout<<dp[W];
	return 0;
}
相关推荐
小小龙学IT14 分钟前
现代 C++ 内存管理与资源安全深度解析:从 RAII 到所有权模型
c++·安全
欧特克_Glodon23 分钟前
OpenCV计算机视觉开发入门与实践<十三>:图像转换之灰度图、二值图
c++·人工智能·opencv·计算机视觉
神仙别闹30 分钟前
基于C++ MFC实现动态分区分配存储管理
开发语言·c++·mfc
skr爱码士33 分钟前
03_第一个Qt项目:Hello World 的完整拆解
c++·qt·客户端
欧特克_Glodon44 分钟前
OpenCV计算机视觉开发入门与实践<十二>:XML 和 YAML 文件读写
xml·c++·opencv·计算机视觉
ryanuo71 小时前
Shadcn/ui × Qt 6/QML:一次从 Web UI 到桌面 UI 的组件化实践
c++·qt·ui·shadcn
余额瞒着我当琳1 小时前
C++--vector第二讲:手写 C++ STL:vector 源码剖析与迭代器失效分析
android·java·c++
郝学胜-神的一滴1 小时前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
不会代码的小猴1 小时前
6. Qt网络编程
开发语言·c++·笔记·qt·算法
沐风老师1 小时前
从零开始学3dMax插件开发!
c++·3dmax插件·3dmax·maxscript