AcWing 292. 炮兵阵地
原题链接
中等
作者:
橙柚哥哥
,
2025-01-15 16:26:13
,
所有人可见
,
阅读 1
求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=110,M=1030;
vector<ll> p;
ll n,m,ans,a[N],dp[2][M][M];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(ll i=1; i<=n; ++i)
for(ll j=1; j<=m; ++j) {
char c;
cin>>c,a[i]=(a[i]<<1)+(c=='H');
}
for(ll i=0; i<1<<m; ++i) if(!(i&(i>>1)) && !(i&(i>>2))) p.push_back(i);
for(ll i=1; i<=n; ++i)
for(ll j:p) if(!(a[i]&j))
for(ll k:p) if(!(j&k))
for(ll l:p) if(!(j&l))
dp[i&1][j][k]=max(dp[i&1][j][k],dp[(i&1)^1][k][l]+__builtin_popcount(j));
for(ll i:p) for(ll j:p) ans=max(ans,dp[n&1][i][j]);
cout<<ans;
return 0;
}