初级版
背包问题
动态规划有经典的“背包问题”
动态背包分为了以下这几种:
01背包、完全背包、多重背包这3种今天要讲的,也是最基本的3种背包
还有就是由以上3种背包组成的组合背包
来3道题吧!
01背包
问题描述:有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxm = 201, maxn = 31;
int m, n;
int w[maxn], c[maxn];
int f[maxm];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>m>>n;
for (int i = 1; i <= n; i++)
cin>>w[i]>>c[i];
for (int i = 1; i <= n; i++)
for (int v = m; v > 0; v--)
if (w[i] <= v) f[v] = max(f[v],f[v-w[i]]+c[i]);
cout<<f[n][m]<<en