求
#include<bits/stdc++.h>
using namespace std;
int dp[205][100][100];
int a[205];
int f[100];
int n,m,cnt=0,temp=0;
int num(int state)
{
int cnt=0;
for(int i=1;i<=n;i++)
{
if(state&1) cnt++;
state>>=1;
}
return cnt;
}
int main()
{
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char ch;
cin>>ch;
a[i]=a[i]<<1;
if(ch=='H') a[i]=a[i]|1;
}
}
for(int state=0;state<(1<<m);state++)
{
if((((state<<1)&state)==0)&&(((state<<2)&state)==0)&&(((state>>1)&state)==0)&&(((state>>2)&state)==0))
{
f[cnt]=state;
cnt++;
}
}
for(int j=0;j<cnt;j++)
{
if((f[j]&a[1])==0)
{
dp[1][0][j]=max(dp[1][0][j],num(f[j]));
ans=max(ans,dp[1][0][j]);
}
}
for(int j=0;j<cnt;j++)
{
for(int k=0;k<cnt;k++)
{
if((f[j]&a[2])==0&&(f[k]&a[1])==0&&(f[j]&f[k])==0)
{
dp[2][k][j]=max(dp[2][k][j],dp[1][0][k]+num(f[j]));
ans=max(ans,dp[2][k][j]);
}
}
}
for(int i=3;i<=n;i++)
{
for(int l=0;l<cnt;l++)
{
if(f[l]&a[i-2]) continue;
for(int k=0;k<cnt;k++)
{
if((f[k]&a[i-1])||(f[k]&f[l])) continue;
for(int j=0;j<cnt;j++)
{
if((f[j]&a[i])==0&&(f[j]&f[k])==0&&(f[l]&f[j])==0)
{
dp[i][k][j]=max(dp[i][k][j],dp[i-1][l][k]+1);
ans=max(ans,dp[i][k][j]);
}
}
}
}
}
cout<<ans<<endl;
}
大佬们帮帮我!