Given n items with size A[i], an integer m denotes the size of a backpack. How full you can fill this backpack?
Example
If we have 4 items with size [2, 3, 5, 7], the backpack size is 11, we can select 2, 3 and 5, so that the max size we can fill this backpack is 10. If the backpack size is 12. we can select [2, 3, 7] so that we can fulfill the backpack.
You function should return the max size we can fill in the given backpack.
Note
Analysis:
You can not divide any item into small pieces.
We can say all the possible sums that are smaller than m. The biggest one is the result.
class Solution {
public:
int backPack(int m, vector<int> A) {
// write your code here
int len = A.size();
vector<bool> size(m+1,false);
size[0] = true;
for (int i=0;i<len;i++)
{
for (int j=m;j>=A[i];j--)
{
if (size[j-A[i]])
size[j] = true;
}
}
int i = m;
while(!size[i]) i--;
return i;
}
};