BABTWR - Tower of Babylon - SPOJ Solution C++

  Problem Link : BABTWR  


👉 Hint : edit please

 


✅ 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!!