Acwing 背包题
有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
解法:相较于01背包,完全背包的物品是无限件用的,那么我们只需要进行一个小改动,第一维还是for(int i = 1 ; i <= n; i++)第二维需要改变一下,就是从体积小的开始for(itn j = a[i].v; j <= V; j++)转移方程还是dp[j] = max(dp[j], dp[j - a[i].v] + a[i].w)即可
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e3 + 5;
struct node{
int v,w;
}a[maxn];
int dp[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 = a[i].v; j <= m; j++){
dp[j] = max(dp[j], dp[j - a[i].v] + a[i].w);
}
}
cout << dp[m] << '\n';
}