➤ Problem Link : MAXWOODS
👉 Hint : Use 2D or 3D DP
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; int dp[201][201][2]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin>>t; while(t--) { int m,n; cin>>m>>n; char arr[m][n]; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) cin>>arr[i][j]; } int cnt=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) dp[i][j][0]=dp[i][j][1]=INT_MIN; } for(int i=0;i<n;i++) { if(arr[0][i]=='#') break; else if(arr[0][i]=='T') dp[0][i][0]=++cnt; else dp[0][i][0]=cnt; } for(int i=1;i<m;i++) { for(int j=0;j<n;j++) { if(j==0) { if(arr[i][j]=='T' && dp[i-1][j][1]!=-1) dp[i][j][0]=1+dp[i-1][j][1]; if(arr[i][j]=='0') dp[i][j][0]=dp[i-1][j][1]; if(arr[i][n-1-j]=='T' && dp[i-1][j][0]!=-1 ) dp[i][n-1-j][1]=1+dp[i-1][n-1-j][0]; if(arr[i][n-1-j]=='0') dp[i][n-1-j][1]=dp[i-1][n-1-j][0]; cnt=max(cnt,dp[i][j][0]); cnt=max(cnt,dp[i][n-1-j][1]); } else { if(arr[i][j]=='T') dp[i][j][0]=1+max(dp[i][j-1][0],dp[i-1][j][1]); if(arr[i][j]=='0') dp[i][j][0]=max(dp[i][j-1][0],dp[i-1][j][1]); if(arr[i][n-1-j]=='T') dp[i][n-1-j][1]=1+max(dp[i][n-j][1],dp[i-1][n-1-j][0]); if(arr[i][n-1-j]=='0') dp[i][n-1-j][1]=max(dp[i][n-j][1],dp[i-1][n-1-j][0]); cnt=max(cnt,dp[i][j][0]); cnt=max(cnt,dp[i][n-1-j][1]); } } } cout<<cnt<<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!!