一、背包九讲总述
关于动态规划问题,最典型的就是背包九讲,先理解背包九讲后再总结关于动态规划的问题。
1、01背包问题
2、完全背包问题
3、多重背包问题
4、混合背包问题
5、二维费用的背包问题
6、分组背包问题
7、背包问题求方案数
8、求背包问题的方案
9、有依赖的背包问题
上一个博客讲解了c++背包九讲之01背包
二、完全背包问题
完全背包问题: 有n件物品和一个容量为C的背包, 每种物品有无数件,第i件物品的费用是w[i],价值是v[i]。求解将哪些物品装入背包可使价值总和最大。
对于第i件物品,依旧存在两种情况:
1、第i件选择不放进背包时:V[i][j]=V[i-1][j];
此时总价值就是只有i-1个物体,背包容量为j时,可获得的最大价值总和
2、第i件选择放进背包时:V[i][j]=V[i][j-w[i]]+v[i];
这里是和01背包问题的区别所在,因为完全背包问题是存在无数件相同的物体,故第i件放进背包里之后还可能再把它放进背包里,所以此时是V[i][j]=V[i][j-w[i]]+v[i],不是V[i][j]=V[i-1][j-w[i]]+v[i]
拿01背包博客的示例2举例:
#include<iostream>
#include<algorithm>
using namespace std;
//全局变量定义在堆区,自动初始化
int V[100][100];
int x[100];
int packet(int n, int C, int v[], int w[])
{
int i = 0, j = 0;
//此循环为核心,重点!!
for (i = 0; i <= n; i++)
{
for (j = 1; j <= C; j++)
{
if (j