题目地址 http://acm.hdu.edu.cn/showproblem.php?pid=2602
和上一个01背包几乎完全一样,唯一的区别是输入处理方式和一些小的不同
#include<iostream>
using namespace std;
struct E{
int v,w;
}list[2000];
int max(int x,int y){
return x>y?x:y;
}
int main(){
int T,n,s;
int dp[1010];
cin>>T;
while(T--){
cin>>n>>s;
for(int i=0;i<=s;i++) dp[i]=0;
//读取物品的价值和重量
for(int i=1;i<=n;i++){
cin>>list[i].v;
}
for(int i=1;i<=n;i++){
cin>>list[i].w;
}
for(int i=1;i<=n;i++){
for(int j=s;j>=list[i].w;j--){
dp[j]=max(dp[j-list[i].w]+list[i].v,dp[j]);
}
}
cout<<dp[s]<<endl;
}
return 0;
}