问题描述
有一個背包,容量為M。有N種物品,每種物品有其體積Wi與價值Vi。將這些物品的一部分放入背包,每種物品可以放任意多個,要求總體積不超過容量,且總價值最大。
输入格式
第一行為N, M。
之後N行,每行為Wi, Vi。
输出格式
一個數,為最大價值。
样例输入
3 20
15 16
6 6
7 5
样例输出
18
数据规模和约定
N, M<=1000。
完全背包模板题
ac代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
int n,m;
cin>>n>>m;
int w[n]={0},v[n]={0},dp[m+1]={0};
for(int i=0;i<n;i++)cin>>w[i]>>v[i];
for(int i=0;i<n;i++){
for(int j=w[i];j<=m;j++){
//如果是01背包那么这里变成j=m;j>=w[i];j--
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
cout<<dp[m];
}