#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int f[105][65][65],a[1025],mp[1025]; 
int lowbit(int x){
	return x&-x;
}
int bitcount(int x){
	int cnt=0;
	while(x){
		x-=lowbit(x);
		cnt++;
	}
	return cnt;
}
bool check(int x){
	if(((x<<1)&x)||((x<<2)&x)) return false;
	return true;
}
signed main(){
	cin >> n >> m;
	for(int i=1;i<=n;i++){
		for(int j=0;j<m;j++){
			char c;
			cin >> c;
			if(c=='H') mp[i]|=(1<<j);
		}
	}
	int cnt=0;
	for(int i=0;i<(1<<m);i++){
		if(check(i)) a[++cnt]=i;
	}
	for(int i=0;i<=n;i++){
		for(int j=1;j<=cnt;j++){
			for(int k=1;k<=cnt;k++){
				f[i][j][k]=-1e18;
			}
		}
	}
	f[0][1][1]=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=cnt;j++){
			int s=a[j];
			if(s&mp[i]) continue;
			for(int k=1;k<=cnt;k++){
				int p=a[k];
				if(s&p) continue;
				for(int l=1;l<=cnt;l++){
					int t=a[l];
					if((s&t)||(p&t)) continue;
					f[i][j][k]=max(f[i-1][k][l]+bitcount(s),f[i][j][k]);
				}
			}
		}
	}
	int ans=0;
	for(int i=1;i<=cnt;i++){
		for(int j=1;j<=cnt;j++){
			ans=max(ans,f[n][i][j]);
		}
	}
	cout << ans;
	return 0;
}

0 条评论

目前还没有评论...

信息

ID
529
时间
ms
内存
MiB
难度
9
标签
递交数
107
已通过
30
上传者