完全背包问题
题目描述
h t t p s : / / w w w . a c w i n g . c o m / p r o b l e m / c o n t e n t / 3 / https://www.acwing.com/problem/content/3/ https://www.acwing.com/problem/content/3/
算法思想
完全背包问题与01背包问题差别不大,只是多了一重循环。我们可以通过优化,来减少一重循环(枚举选择商品的数量)。
时间复杂度
O ( M ∗ N ) O(M*N) O(M∗N)(优化后)
代码
#include <bits/stdc++.h>
using namespace std;
int f[500];
int h[50],w[50];
int main()
{
int m,n;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i]>>w[i];
}
for(int i=1;i<=n;i++)
{
for(int j=v[i];j<=m;j++)
{
f[j]=max(f[j],f[j-v[i]]+w[i]);
}
}
cout<<f[m];
return 0;
}