You are on page 1of 1

#include <iostream>

#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;

int dp[203][101][101];
int H, W;
string board[103];

int main(){
int TC;
scanf("%d", &TC);
while(TC--){
scanf("%d%d",&W, &H);
for(int i=0;i<H;++i){
cin >> board[i];
}
dp[0][0][0] = (board[0][0] == '*' ? 1 : 0);
for(int k=1;k<=H+W-2;++k){
for(int i=0;i<=W-1;++i){
for(int j=0;j<=W-1;++j){
dp[k][i][j] = -123456;
if (i>k || j>k || k-i >= H || k-j >= H) continue;
if(board[k-i][i] == '#' || board[k-j][j] == '#'){
continue;
}
if(k-1-i >= 0 && k-1-j >= 0) {
dp[k][i][j] = dp[k-1][i][j];
}
if(i > 0 && k-1-j >= 0) {
dp[k][i][j] = max(dp[k][i][j], dp[k-1][i-1][j]);
}
if(j > 0 && k-1-i >= 0) {
dp[k][i][j] = max(dp[k][i][j], dp[k-1][i][j-1]);
}
if(i > 0 && j > 0) {
dp[k][i][j] = max(dp[k][i][j], dp[k-1][i-1][j-1]);
}
if(i==j){
if(board[k-i][i] == '*') dp[k][i][j]++;
} else {
if(board[k-i][i] == '*') dp[k][i][j]++;
if(board[k-j][j] == '*') dp[k][i][j]++;
}
}
}
}
printf("%d\n", dp[H+W-2][W-1][W-1]);
}
return 0;
}

You might also like