#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10,M=1e3,V=233,INF=1e8;
int n,m,a[N],b[N],dp[N];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=M;++i)dp[i]=-INF;
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;++i){
scanf("%d",&b[i]);
for(int j=a[i];j<=M;++j){
dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
}
}
for(int i=2;i<=M;++i){
dp[i]=max(dp[i],dp[i/2]*2+V);
for(int j=1;j<i;++j){
dp[i]=max(dp[i],dp[j]+dp[i-j]);
}
}
printf("%d\n",dp[m]);
return 0;
}
oj题完全背包
于 2024-01-04 22:29:02 首次发布