CSES - Shared codeLink 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;
}