0-1背包问题
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=10000+50;
int n,m,w[maxn],p[maxn],dp[maxn];
int max(int x,int y){
if(x>=y)return x;
return y;
}
int main(){
int i,j;
while(1){
memset(dp,0,sizeof(dp));
cin>>n>>m;
if(n==0&&m==0)break;
for(i=1;i<=n;i++)cin>>w[i];
for(i=1;i<=n;i++)cin>>p[i];
for(i=1;i<=n;i++){
for(j=m;j>=w[i];j--){
dp[j]=max(dp[j],dp[j-w[i]]+p[i]);
}
}
int ans=0;
for(i=1;i<=m;i++)ans=max(ans,dp[i]);
cout<<ans<<endl;
}
}