include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=55;
ll a[N][N],f[N][N][4][2],n,k,ans,t;
char c[N];
ll st(ll x){//start的意思,判断第x行应该从第几列开始
if(x==1) return 3;
if(x==2) return 2;
return 1;
}
void init(){
memset(f,0,sizeof(f));
memset(a,0,sizeof(a));
n=k=ans=0;
}
signed main(){
scanf("%lld",&t);
while(t--){
init();
scanf("%lld %lld",&n,&k);
for(int i=1;i<=n;i++){
scanf("%s",c);
for(int j=0;j<n;j++){
if(c[j]=='.') a[i][j+1]=0;
else a[i][j+1]=1;
}
}
f[1][1][0][0]=f[1][1][0][1]=1;//没错,这一行应该可以删掉(吧
if(a[1][2]==0){
f[1][2][0][0]=1;
}
if(a[2][1]==0){
f[2][1][0][1]=1;
}
for(int i=1;i<=n;i++){
for(int j=st(i);j<=n;j++){
if(a[i][j]==1) continue;
f[i][j][0][0]+=f[i][j-1][0][0];
f[i][j][0][1]+=f[i-1][j][0][1];
for(int l=1;l<=3;l++){
f[i][j][l][0]+=f[i][j-1][l][0];
f[i][j][l][1]+=f[i-1][j][l][1];
f[i][j][l][0]+=f[i][j-1][l-1][1];
f[i][j][l][1]+=f[i-1][j][l-1][0];
}
}
}
for(int i=0;i<=k;i++){//貌似从1开始遍历也可以?不过没关系啦
ans+=f[n][n][i][0]+f[n][n][i][1];
}
printf("%lld\n",ans);
}
return 0;
}
walking home
最新推荐文章于 2024-07-13 23:39:28 发布