背包问题系统题解
一、01背包问题(背包问题根源)
描述
一个小偷进入超市,带一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是blablaba,求背包最大价值
输入
第一行:两个整数,M(背包容量, M ≤ 200 M≤200 M≤200)和N(物品数量,N≤30);
第2到N+1行:每行二个整数,表示每个物品的重量和价值。
输出
仅一行,一个数,表示最大总价值。
代码如下所示,可参考注释加以理解
#include<iostream>
using namespace std;
int w[100000];
//输入用的两个数组
int v[100000];
//w数组用作记录重量,v记录价值
int f[1000][1000];
//二维数组f含义是放X个物品,重X,内部保存总价值
int main()
{
int m,n;
//定义物品数量n,包最大容量m
cin>>m>>n;
// 给这两个变量赋值(输入)
for(int i=1;i<=n;i++)
//用数组下标习惯上从一开始
{
// 因为用0很容易越界,出现问题
cin>>w[i]>>v[i];
//for循环输入每样物品的重量和价值
}
for(int i=1;i<=n;i++)
{
//次数==物品数,对每个物品处理
for(int j=0;j<=m;j++)
{
//从零开始遍历背包物品的总重量(m)
f[i][j]=f[i-1][j];
/