这里用贪心的算法就很容易能够算出来结果。
思路:我们知道,要想装的箱子数最少,我们需要先把大容量的箱子用上,然后再用小的这样才能实现局部最优。
那么我们直接对于箱子的容量进行排序,然后从大容量的箱子开始装就行了,至于苹果我们也是从包裹的苹果数多的开始装。
注意:每个包裹的苹果数是可以拆开的,所以不用考虑不必要的可能性:
class Solution {
public:int minimumBoxes(vector<int>& apple, vector<int>& capacity) {int n=apple.size();int m=capacity.size();int count=0;int sum=0;sort(capacity.begin(),capacity.end(),greater<int>());for(int i=0;i<n;i++)sum+=apple[i];for(int i=0;i<m,sum>0;i++){sum-=capacity[i];count++;}return count;}
};