C++完全背包

本文介绍了完全背包问题,即在不超过背包最大承重的情况下,选择物品以最大化总价值。与零一背包不同,完全背包允许同一物品无限次选择。文章提供了一个C++解决方案,通过正向循环体现完全背包的后效性,实现从轻到重选择物品的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完全背包简介

题目描述:
给出N个物品(一个物品可以选择多次,没有限制),背包最大承重为M,每个物品有一个重量w,一个价值v。如何选择才能在重量不超过M的情况下,使选择的物品的价值总和最大。

输入格式:
第一行:是两个正整数N,M。
第2 ~ (n + 1)行:每行两个正整数w和v。

输出格式:
一个整数,为最大价值总和是多少。

输入样例:

6 12
4 8
6 10
2 6
2 3
5 7
1 2

输出样例:

36

解决方法

完全背包与零一背包非常相似。只不过零一背包中一个物品,要么选一次要么不选。而完全背包选择的次数是没有限制的。

:如果你还没学过零一背包,可以去此网址先学习一下https://blog.youkuaiyun.com/SkeletonKing233/article/details/94893608

那么这该怎么办呢?还记得零一背包那篇文章中,在一维数组解法模块中我写到过的后效性吗?零一背包中我们为了避免多选而采取从m到w[i]倒着循环这种方式&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值