#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int w[N+5],c[N+5],dp[N+5];
int main()
{
ios::sync_with_stdio(false);
int t,n,v;
cin>>t;
while(t--)
{
//多组输入,应让数组变为0;
memset(w,0,sizeof(w));
memset(c,0,sizeof(c));
memset(dp,0,sizeof(dp));
cin>>n>>v;
for(int i=1;i<=n;i++)
cin>>c[i];
for(int i=1;i<=n;i++)
cin>>w[i];
//最简单的背包模板;
for(int i=1;i<=n;i++)
for(int j=v;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
cout<<dp[v]<<endl;
}
return 0;
}
题目地址:
http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1392
for(int i=1;i<=n;i++)
for(int j=v;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
j为容量,dp[j]记录最大价值;
dp[j]记录此时最大的dp值或 **j-w[i]**容量的dp值加上此时的价值