Link to this code: https://cses.fi/paste/47715dab16859bd865cef9/
#include<bits/stdc++.h>
using namespace std;
int main() {
 int n,x,mask,i;
 cin>>n>>x;
 int w[n];
 for(auto &i:w)cin>>i;
 int maskLen=1<<n;
 int dp[maskLen][2];
 dp[0][0]=1;
 dp[0][1]=0;
 int elevatorRides,totalWeight,p;
 for(mask=1;mask<maskLen;mask++){
  dp[mask][0]=21;
  dp[mask][1]=0;
  for(i=0;i<n;i++){
    p=1<<i;
    if(mask&p){
      elevatorRides=dp[mask^p][0];
      totalWeight=dp[mask^p][1];
      if(totalWeight+w[i]<=x){
        totalWeight+=w[i];
      }else{
        totalWeight=w[i];
        elevatorRides++;
      }
      if((elevatorRides<dp[mask][0]) or (elevatorRides==dp[mask][0]&&totalWeight<dp[mask][1])){
        dp[mask][0]=elevatorRides;
        dp[mask][1]=totalWeight;
     }
  }
 }
}
 int rides=dp[maskLen-1][0];
 cout<<rides<<endl;
}