题目描述
小明有一个容量为V的背包。
这天他去商场购物,商场一共有N种物品,第 i 种物品的体积为wi,价值为ui,每种物品都有无限多个。
小明想知道在购买的物品总体积不超过V的情况下所能获得的最大价值为多少,请你帮他算算。
输入描述
输出描述
输出一行整数表示小明所能获得的最大价值。
输入输出样例
输入:
5 20
1 6
2 5
3 8
5 15
3 3
输出:
120
最终代码c/c++
#include<bits/stdc++.h>
using namespace std;
const int N = 3011;
int w[N], v[N]; // 物品的价值和体积
int dp[N][N];
//商品种类 体积
int solve(int n, int V)
{
for (int i = 1; i <= n; i++)
{
for (int j = V; j >= 0; j--)
{
if(i==1) dp[i][j] = 0;
else dp[i][j] = dp[i - 1][j];
for (int k = 0; k * v[i] <= j; k++)
dp[i][j] = max(dp[i][j], dp[i - 1][j - k * v[i]] + k * w[i]);
}
}
return dp[n][V];
}
int main()
{
int n,V; cin >> n >> V;
for(int i=1;i<=n;i++)
cin >> v[i] >> w[i];
memset(dp,0,sizeof(dp));
cout << solve(n,V) << endl;
return 0;
}