Misa-Misa's blog

By Misa-Misa, history, 12 months ago, In English

Past week, i was asked this problem in an interview, i don't know the solution till now, help me with this.

Problem

There are $$$N$$$ people in a group, weight of $$$i$$$ 'th person is $$$W[i]$$$, there is a lift of capacity $$$C$$$ which is the maximum weight the lift can carry, everyone wants to go to the top floor via lift.
Determine $$$M$$$, where $$$M$$$ is the minimum times lift must be used by the group so that everyone is able to go to the top floor.

Constraints

Not sure about constraints, please give the best solution you can.

Test Case

$$$N$$$ = 4
$$$C$$$ = 90
$$$W$$$ = [10, 20, 70, 80]

$$$ANS$$$ = 2

  • Vote: I like it
  • +9
  • Vote: I do not like it

| Write comment?
»
12 months ago, # |
  Vote: I like it 0 Vote: I do not like it

you can solve this problem with dp bitmask if n <= 20 ))

»
12 months ago, # |
  Vote: I like it +11 Vote: I do not like it

You can see solution in handbook on page 103

»
12 months ago, # |
  Vote: I like it +3 Vote: I do not like it

This is standard subset dp(bitmask dp)

for (int s = 1; s < (1<<n); s++) {

// initial value: n+1 rides are needed

best[s] = {n+1,0};

for (int p = 0; p < n; p++) {

if (s&(1<<p)) {

auto option = best [s^(1<<p)];

if (option.second+weight[p] <= x) {

// add p to an existing ride option.second += weight[p];

} else {

// reserve a new ride for p option.first++;

option.second = weight[p];

}

best[s] = min(best[s], option);

} } }

»
12 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Isn't it knapsack problem?

»
12 months ago, # |
  Vote: I like it 0 Vote: I do not like it