小明有一个容量为 VV 的背包。
这天他去商场购物,商场一共有 NN 件物品,第 ii 件物品的体积为 w_iwi,价值为 v_ivi。
小明想知道在购买的物品总体积不超过 VV 的情况下所能获得的最大价值为多少,请你帮他算算。
输入描述
输入第 11 行包含两个正整数 N,VN,V,表示商场物品的数量和小明的背包容量。
第 2\sim N+12∼N+1 行包含 22 个正整数 w,vw,v,表示物品的体积和价值。
1\leq N\leq10^21≤N≤102,1\leq V \leq 10^31≤V≤103,1 \leq w_i,v_i \leq10^31≤wi,vi≤103。
输出描述
输出一行整数表示小明所能获得的最大价值。
输入输出样例
示例 1
输入
5 20
1 6
2 5
3 8
5 15
3 3
输出
37
#include<iostream>
#include<algorithm>
using namespace std;
int d[101][1001],w[101],v[101];
const int M=1010;
//int w[M],v[M]; //体积 / 价值
int f[M][M];//f[i][j], j体积下前i个物品的最大价值
int max(int a,int b)
{if(a>b)
return a;
else
return b;
}
int main()
{
int n,i,a,j;
cin>>n>>a;
for(i=1;i<=n;i++)
cin>>w[i]>>v[i];
for(i=1;i<=n;i++)
for(j=1;j<=a;j++)
if(j<w[i])
d[i][j]=d[i-1][j];
else
d[i][j]=max(d[i-1][j],d[i-1][j-w[i]]+v[i]);
cout << d[n][a] << endl;
return 0;}