#include <iostream> #include <vector> using namespace std; /************************************************************************/ /* 给定物品个数M,背包个数N,每个背包容量k,依次输入物品的重量 当物品放不下背包时,如果还有背包则放入下一背包,如果没有,直接扔掉。 当下一背包中放入物品后,该背包封口即不可再放物品。 用例输入: 5 5 2 4 3 4 2 1 输出:3 */ /************************************************************************/ int succssPutInKnapsack(const int M,const int k,const int N,vector<int> &weight) { int result = 0; vector<int> pack(N,0); int j=0; for (int i=0;i<M;i++) { if (weight[i] <= k) { if (weight[i] + pack[j] <= k) { pack[j] += weight[i]; result++; } else { if (i == M-1) return result; if (j+1 != N) { j++; pack[j] += weight[i]; result++; } } } } return result; } int main() { int M,N,k,weighti; vector<int> weight; cin>>M>>k>>N; for (int i=0;i<M;i++) { cin>>weighti; weight.push_back(weighti); } cout<<"成功拿走物品数: "<<succssPutInKnapsack(M,k,N,weight)<<endl; system("pause"); return 0; }
时间: 2024-10-13 19:46:28