WA#2~#10但是hack能过,求条
查看原帖
WA#2~#10但是hack能过,求条
975724
Sine_Func楼主2025/2/4 13:19
#include <bits/stdc++.h>
#define double long double
#define AC return 0
#define pii pair<int,int>
#define fi first
#define se second
#define gc getchar
#define el cout<<"\n"
#define ls (p<<1)
#define rs (p<<1|1)
//#define int long long
#define lowbit(x) ((x)&(-x))
using namespace std;
const int N = 200010;
int n, m, f[110][1 << 10][1 << 10], h[1 << 10], a[110], l, ans;
//f[i][j][k] i行 i是j i-1是k 最多
char c;
int getsum(int x) {
	int ret = 0;
	while (x) {
		x -= lowbit(x);
		ret++;
	}
	return ret;
}
string gete(int x) {
	return bitset<4>(x).to_string();
}
signed main() {
//	ios::sync_with_stdio(0);
//	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 0; j < m; j++) {
			cin >> c;
			a[i] <<= 1;
			if (c == 'H')a[i]++;
		}
	for (int i = 0; i < (1 << m); i++)
		if (!(((i << 2) | (i << 1) | (i >> 1) | (i >> 2))&i))
			h[++l] = i;
	for (int i = 1; i <= n + 1; i++)
		for (int j = 1; j <= l; j++)//i
			if (!(a[i]&h[j]))
				for (int k = 1; k <= l; k++)//i-1
					if ((!(a[i - 1]&h[k])) && (!(h[j]&h[k])))
						for (int p = 1; p <= l; p++)//i-2
							if ((!(a[i - 2]&h[j])) && (!(h[k]&h[p])) && (!(h[j]&h[p])))
								f[i][h[j]][h[k]] = max(f[i][h[j]][h[k]], f[i - 1][h[k]][h[p]] + getsum(h[j]));
	for (int i = 1; i <= l; i++)
		ans = max(ans, f[n + 1][0][h[i]]);
	cout << ans;
	AC;
}
2025/2/4 13:19
加载中...