通法是暴力枚举,只需列出情况枚举即可。但,我偏要dp,我就是要dp。状态转移,从左到右,嗯嗯,很标准的dp。那就直接上代码嘞。。。。(我就是懒,我就是不想解释emmmm,代码很清楚嘞,一看就懂了)。
代码如下:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<math.h>
#include<string.h>
#include<queue>
typedef long long ll;
using namespace std;
char s[4][200005];
ll dp[4][200005];
int main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
ll t;
cin>>t;
while(t--){
ll n;
cin>>n;
ll an=0;
dp[1][0]=0;
dp[2][0]=0;
for(int i=1;i<=2;i++){
for(int j=1;j<=n;j++){
cin>>s[i][j];
if(s[i][j]=='W'){
dp[i][j]=-0x3f3f3f3f;
}
else{
dp[i][j]=1;
an++;
}
}
}
for(int i=1;i<=n;i++){
ll a=dp[1][i];
ll b=dp[2][i];
dp[1][i]=max(dp[1][i]+dp[1][i-1],dp[1][i]+b+dp[2][i-1]);
dp[2][i]=max(dp[2][i]+dp[2][i-1],dp[2][i]+a+dp[1][i-1]);
}
if(dp[1][n]==an||dp[2][n]==an){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}
}