可以当作01背包的模版。代码:
//
// main.cpp
// HDU2602
//
// Created by jinyu on 2018/7/16.
// Copyright © 2018年 jinyu. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int dp[1000+77];
int w[1000+77];
int v[1000+77];
int main(){
int T;
cin>>T;
while(T--){
memset(dp, 0, sizeof(dp));
int n,s;
scanf("%d%d",&n,&s);
for(int i = 0;i<n;i++){
scanf("%d",&v[i]);
}
for(int i = 0;i<n;i++){
scanf("%d",&w[i]);
}
for(int i = 0;i<n;i++){
for(int j = s;j>=w[i];j--){
dp[j] = max( dp[j] , dp[j-w[i]] + v[i] );
}
}
printf("%d\n",dp[s]);
}
return 0;
}