➤  Problem Link : 4D. Mysterious Present  
✅ C++ Solution :
 
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
bool comp(pair<int,pair<int,int> > a, pair<int,pair<int,int> > b)
{
    if(a.second.first != b.second.first)
        return a.second.first < b.second.first;
        
    return a.second.second < b.second.second;    
}
void printAll(int v, int sol[],pair<int,pair<int,int> > arr[])
{
	if(sol[v]==v)
	{
		cout<<arr[v].first<<" ";
		return;
	}
	printAll(sol[v],sol,arr);
	cout<<arr[v].first<<" ";
}
int main()
{
	int n,w,h,a,b;
	cin>>n>>w>>h;
	pair<int,pair<int,int> > arr[n];
	int k=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a>>b;
		if(a > w && b > h)
		{
			arr[k].first=i;
			arr[k].second.first = a;
			arr[k++].second.second = b;
		}
	}
    if(k==0)
    {
        cout<<"0";
        exit(0);
    }
	sort(arr,arr+k,comp);
	int dp[k+1];
	int sol[k+1];
	ll top=0;
	dp[0]=1;
	sol[0]=0;
	for(int i=1;i<k;i++)
	{
		dp[i]=1;
		sol[i]=i;
		for(int j=i-1;j>=0;j--)
		{
			if(arr[j].second.first < arr[i].second.first && arr[j].second.second < arr[i].second.second && dp[j]+1>dp[i])
			{
				dp[i]=dp[j]+1;
				sol[i]=j;
			}
		}
		if(dp[i]>dp[top])
			top=i;
	}
	cout<<dp[top]<<"\n";
	printAll(top,sol,arr);
}
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!!
➤  Problem Link : 4D. Mysterious Present  
✅ C++ Solution :
 
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
bool comp(pair<int,pair<int,int> > a, pair<int,pair<int,int> > b)
{
    if(a.second.first != b.second.first)
        return a.second.first < b.second.first;
        
    return a.second.second < b.second.second;    
}
void printAll(int v, int sol[],pair<int,pair<int,int> > arr[])
{
	if(sol[v]==v)
	{
		cout<<arr[v].first<<" ";
		return;
	}
	printAll(sol[v],sol,arr);
	cout<<arr[v].first<<" ";
}
int main()
{
	int n,w,h,a,b;
	cin>>n>>w>>h;
	pair<int,pair<int,int> > arr[n];
	int k=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a>>b;
		if(a > w && b > h)
		{
			arr[k].first=i;
			arr[k].second.first = a;
			arr[k++].second.second = b;
		}
	}
    if(k==0)
    {
        cout<<"0";
        exit(0);
    }
	sort(arr,arr+k,comp);
	int dp[k+1];
	int sol[k+1];
	ll top=0;
	dp[0]=1;
	sol[0]=0;
	for(int i=1;i<k;i++)
	{
		dp[i]=1;
		sol[i]=i;
		for(int j=i-1;j>=0;j--)
		{
			if(arr[j].second.first < arr[i].second.first && arr[j].second.second < arr[i].second.second && dp[j]+1>dp[i])
			{
				dp[i]=dp[j]+1;
				sol[i]=j;
			}
		}
		if(dp[i]>dp[top])
			top=i;
	}
	cout<<dp[top]<<"\n";
	printAll(top,sol,arr);
}
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!!
