有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 #include <iostream> using namespace std; const int N = 1010; int n;//物品个数 int Weight[N];//物品的重量 int Value[N];//物品的价值 int Amount[N];//每个物品有几个 int BagSize; int dp[N][N]; int main(int argc, char** argv) { cin>>n>>BagSize; for(int i = 1; i <= n; i++) { cin>>Weight[i]>>Value[i]>>Amount[i]; } for(int i = 1; i <= n; i++) { for(int j = 0; j <= BagSize; j++) { //K不能超过该物品总数 并且背包要能装下 for(int k = 0; k <= Amount[i] && k*Weight[i] <= j; k++) { dp[i][j] = max(dp[i][j] , dp[i-1][j-k*Weight[i]] + k*Value[i]); } } } cout<<dp[n][BagSize]<<endl; return 0; }