#include <bits/stdc++.h> using namespace std; int memo[1000][1000]={0}; int knapSack(int weight[],int value[],int index,int capacity){ if(index<=0 || capacity<=0) return 0; if(memo[index][capacity] !=0){ return memo[index][capacity]; } // 不包含第index个物品所得的价值 int res = knapSack(weight,value,index-1,capacity); // 包含第index个物品所得的价值 if(weight[index]<=capacity) { res = max(res,value[index]+knapSack(weight,value,index-1,capacity-weight[index])); } //添加子问题的解,便于下次直接使用 memo[index][capacity] = res; return res; } int main(){ int n,c; // 第一行为n值和c值,表示n件物品和背包容量c cin>>n>>c; int weight[1000]; int value[1000]; for(int i=1;i<=n;i++){ //每行有两个数据,分别表示第i(1≤i≤n)件物品的重量和价值。 cin>>weight[i]>>value[i]; } cout<<knapSack(weight,value,n,c)<<endl; }