➤ Problem Link : BABTWR
👉 Hint : Solve LIS DP problem first. Think about different possible rotations to solve.
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; int main() { while(1) { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin>>n; if(n==0) break; int ht[n],wd[n],dpt[n]; long long int sum=0; for(int i=0;i<n;i++) { cin>>ht[i]>>wd[i]>>dpt[i]; sum+=ht[i]+wd[i]+dpt[i]; } vector<pair<int,int > >base; vector<int> h; for(int i=0;i<n;i++) { base.push_back(make_pair(wd[i],dpt[i])); h.push_back(ht[i]); base.push_back(make_pair(wd[i],ht[i])); h.push_back(dpt[i]); base.push_back(make_pair(ht[i],dpt[i])); h.push_back(wd[i]); base.push_back(make_pair(ht[i],wd[i])); h.push_back(dpt[i]); base.push_back(make_pair(dpt[i],wd[i])); h.push_back(ht[i]); base.push_back(make_pair(dpt[i],ht[i])); h.push_back(wd[i]); } bool dp[sum+1][h.size()+1]; memset(dp,true,sizeof(dp)); int height=0; for(int i=1;i<=sum;i++) { for(int j=0;j<h.size();j++) { for(int k=0;k<h.size();k++) { if(i==h[j] || (i>=h[j] && dp[i-h[j]][k]==true && base[k].first<base[j].first && base[k].second<base[j].second)) { dp[i][j]=true; height=max(height,i); break; } dp[i][j]=false; } } } cout<<height<<endl; } }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!