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