➤ Problem Link : SERVICE
👉 Hint : edit please
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin>>t; int dp[1001][201][201]; while(t--) { int n,l,ans; cin>>l>>n; int arr[l+1][l+1]; int req[n+1]; for(int i=1;i<=l;i++) { for(int j=1;j<=l;j++) cin>>arr[i][j]; } for(int i=1;i<=n;i++) cin>>req[i]; memset(dp,0,sizeof(dp)); for(int i=n;i>1;i--) { for(int j=1;j<=l;j++) { for(int k=1;k<=l;k++) { if(i==n) { if(req[i-1]==req[i] || j==req[i] || k==req[i]) dp[i][j][k]=0; else dp[i][j][k]=min(arr[req[i-1]][req[i]],min(arr[j][req[i]],arr[k][req[i]])); } else { if(req[i-1]==req[i]) dp[i][j][k]=dp[i+1][j][k]; else if(j==req[i]) dp[i][j][k]=dp[i+1][req[i-1]][k]; else if(k==req[i]) dp[i][j][k]=dp[i+1][j][req[i-1]]; else { dp[i][j][k]=min(arr[req[i-1]][req[i]]+dp[i+1][j][k],min(arr[j][req[i]]+dp[i+1][req[i-1]][k],arr[k][req[i]]+dp[i+1][req[i-1]][j])); } } } } } if(req[1]==1) ans=dp[2][2][3]; else if(req[1]==2) ans=dp[2][1][3]; else if(req[1]==3) ans=dp[2][1][2]; else ans=min(arr[1][req[1]]+dp[2][2][3],min(arr[2][req[1]]+dp[2][1][3],arr[3][req[1]]+dp[2][1][2])); cout<<ans<<endl; // cout<<dp[2][2][3]<<" "<<dp[3][4][3]<<" "<<dp[4][2][3]<<" "<<dp[8][4][5]<<dp[9][4][5]<<dp[9][3][4]; } }
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!!