Acwing 01背包模板题
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大输出最大价值. 1 <= N,V <= 1000
解法:经典01背包问题,由于N,V比较小我们可以直接采取N*V进行,第一维就是1-N表示物品,第二维for(int j = V; j >= a[i].v; j–),转移方程就是dp[j] = max(dp[j], dp[j - a[i].v] + a[i].w)即可
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 5;
int dp[maxn];
struct node{
int v,w;
}a[maxn];
int main(){
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i].v >> a[i].w;
}
for(int i = 1; i <= n; i++){
for(int j = m; j >= a[i].v; j--){
dp[j] = max(dp[j], dp[j - a[i].v] + a[i].w);
}
}
cout << dp[m] << '\n';
}