Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool check(int k, int N, int W, vector<int> w){
- // multiset<int> st;
- // for(auto x:w){
- // st.insert(x);
- // }
- vector<int> boxes(k, W);
- vector<int> taken(N, false);
- int box = 0;
- while(box<k){
- bool flag = 0;
- bool flag2 = 1;
- for(int i = N-1;i>=0;i--){
- if(!taken[i] && w[i]<=boxes[box]){
- boxes[box]-=w[i];
- taken[i] = 1;
- flag = 1;
- }
- }
- if(!flag){
- box++;
- }
- for(int i = 0;i<N;i++){
- if(!taken[i]){
- flag2 = false;
- }
- if(flag2){
- break;
- }
- }
- }
- for(int i = 0;i<N;i++){
- if(!taken[i]){
- return false;
- }
- }
- return true;
- }
- int get_minimum_parcels(int N, int W, vector<int> w) {
- // Write your code here. Complete this function to return the minimum number of parcels required by Michael.
- sort(w.begin(), w.end());
- int l = 1, r = N, ans = N;
- while(l<=r){
- int m = (l+r)/2;
- if(check(m, N, W, w)){
- ans = m;
- r = m - 1;
- }else{
- l = m + 1;
- }
- }
- return ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement