iqer @ 2021-09-30 22:44:03
#include <bits/stdc++.h>
using namespace std;
char x;
int n, m, line[105], t[105][1025], f[105][1025];
int check(int s){
int num = 0;
while(s){
if(s & 1)++num;
s >>= 1;
}
return num;
}
int main(){
freopen("in.txt", "r", stdin);
cin >> n >> m;
for(int i = 1; i <= n; ++i){
getchar();
for(int j = 0; j < m; ++j){
cin >> x;
if(x == 'P')line[i] = (line[i] << 1) | 1;
else line[i] = (line[i] << 1) | 0;
// cout << x;
}
// cout << endl;
}
// for(int i = 1; i <= n; ++i)cout << line[i] << endl;
t[0][0] = 1; t[0][1] = 0;
for(int i = 0; i < (1 << m); ++i){
if(!(i & (i << 2)) && !(i & (i << 1)) && !(i & (i >> 1)) && !(i & (i >> 2))){
for(int j = 1; j <= n; ++j){
if((line[j] & i) == i){
++t[j][0];
t[j][t[j][0]] = i;
}
}
}
}
// for(int i = 1; i <= n; ++i){
// for(int j = 1; j <= t[i][0]; ++j){
// cout << t[i][j] << " ";
// }
// cout << endl;
// }
for(int i = 1; i <= t[1][0]; ++i)f[1][i] = check(t[1][i]);
for(int i = 2; i <= n; ++i){
for(int j = 1; j <= t[i][0]; ++j){
for(int k = 1; k <= t[i - 2][0]; ++k){
for(int m = 1; m <= t[i - 1][0]; ++m){
if(!(t[i][j] & t[i - 2][k]) && !(t[i][j] & t[i - 1][m]) && !(t[i - 2][k] & t[i - 1][m])){
f[i][j] = max(f[i][j], f[i - 2][k] + check(t[i - 1][m]) + check(t[i][j]));
}
}
}
}
}
// for(int i = 1; i <= n; ++i){
// for(int j = 1; j <= t[i][0]; ++j){
// cout << f[i][j] << " ";
// }
// cout << endl;
// }
int ans = -1;
for(int i = 1; i <= t[n][0]; ++i)ans = max(ans, f[n][i]);
cout << ans;
return 0;
}