➤ Problem Link : BAT2
👉 Hint : Think about 3D DP
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; int arr[102]; int dp[101][101][101]; int Batman(int i,int l,int d) { if(i==0) return 0; int x=INT_MIN; int y=INT_MIN; int z=INT_MIN; if(arr[i]<arr[l]) { if(dp[i-1][i][d]==-1) dp[i-1][i][d]=Batman(i-1,i,d); x=dp[i-1][i][d]; } if(arr[i]>arr[d]) { if(dp[i-1][l][i]==-1) dp[i-1][l][i]=Batman(i-1,l,i); y=dp[i-1][l][i]; } if(dp[i-1][l][d]==-1) dp[i-1][l][d]=Batman(i-1,l,d); z=dp[i-1][l][d]; return dp[i][l][d]=max(z,max(1+x,1+y)); } int main() { int t; cin>>t; while(t--) { int n; cin>>n; memset(dp,-1,sizeof(dp)); for(int i=1;i<=n;i++) cin>>arr[i]; arr[n+1]=INT_MAX; arr[0]=INT_MIN; cout<<Batman(n,n+1,0)<<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!!