前面讲了有一个或者有无穷个的,现在说一说有限个,有限个就相当于多个01背包加起来就好了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N,V;
cin>>N>>V;
vector<int>weight(1000,0),value(1000,0),num(1000,0),dp[1000];
for(int i=0;i<=N;i++)
{dp[i].reserve(N+1);
for(int j=0;j<=V;j++)
dp[i][j]=0;}
for(int i=1;i<=N;i++)
cin>>weight[i];
for(int i=1;i<=N;i++)
cin>>value[i];
for(int i=1;i<=N;i++)
cin>>num[i];
for(int i=1;i<=N;i++)
for(int k=0;k<=num[i];k++)
for(int j=V;j>=weight[i]*k;j--)
dp[i][j]=max(dp[i][j],dp[i-1][j-k*weight[i]]+value[i]*k);
cout<<dp[N][V]<<endl;
return 0;
}