//01背包问题 #include<iostream> using namespace std; const int maxn = 100; //物品数最大值 const int maxv = 1000;//容量最大值 int main() { int n;//n件物品 int V;//b背包容量 int dp[maxn][maxv] ;//dp[i][v]代表前i件物品恰好装入容量为v的背包的最大价值 int w[maxn];//物品重量 int c[maxn];//物品价值 int v; while(cin>>n>>V) { for(int i=1;i<=n;i++) { cin>>w[i]; } for(int i=1;i<=n;i++) { cin>>c[i]; } //初始化边界 for(v=0;v<=V;v++)//放入0件物品的价值为0 dp[0][v] = 0; for(int i=1;i<=n;i++) { for(v=1;v<=V;v++) { if(v<w[i]) //第i件物品放不进去 dp[i][v] = dp[i-1][v]; else dp[i][v] = max(dp[i-1][v],dp[i-1][v-w[i]]+c[i]); } } cout<<dp[n][V]<<endl; } return 0; }