二 完全背包问题
题目描述:
有 N 件物品和一个容量是 V 的背包。每种物品都有无限件可用。第 i件物品的体积是 v,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
输入格式:
第一行两个整数 N,V用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi用空格隔开,分别表示第 i件物品的体积和价值。
分析:
和01背包问题相比区别在于完全背包问题物品有无限个
那么我们可以按照处理01背包问题的方式写出状态转移方程:
f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}//k 表示物品取的个数,c[i]表示第i种物品的体积,w[i]表示第i种物品的价值
有了状态转移方程,我们可以直接写出完全背包问题二维数组的解法。
#include<iostream>
using namespace std;
const int N = 1010;
int f[N][N];
int v[N],w[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i = 1 ; i <= n ;i ++)
{
cin