比赛 2024.5.23练习赛 评测结果 AAAAAAAAAA
题目名称 Rotate Columns 最终得分 100
用户昵称 yrtiop 运行时间 0.036 s
代码语言 C++ 内存使用 2.94 MiB
提交时间 2024-05-23 19:11:24
显示代码纯文本
#include <bits/stdc++.h>
#define pb emplace_back
#define fir first
#define sec second

using i64 = long long;
using pii = std::pair<int, int>;

constexpr int maxn = 4;
constexpr int maxm = 105;
constexpr int inf = 1e9;

void chkmax(int& x, int y) { if (y > x) x = y; return; }

void work() {
	int n, m;
	std::cin >> n >> m;
	std::vector<std::vector<int>> a(n + 1, std::vector<int>(m + 1, 0));
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			std::cin >> a[i][j];
	std::vector<int> f[2];
	f[0].resize(1 << n);
	f[1].resize(1 << n);
	for (int i = 0; i < 2; ++i)
		std::fill(f[i].begin(), f[i].end(), -inf);
	f[0][0] = 0;
	for (int c = 1; c <= m; ++c) {
		std::fill(f[c & 1].begin(), f[c & 1].end(), -inf);
		std::vector<int> g(n);
		for (int i = 1; i <= n; ++i)
			g[i - 1] = a[i][c];
		auto solve = [&]() -> void {
			for (int s = 0; s < (1 << n); ++s)
				for (int t = 0; t < (1 << n); ++t)
					if ((s | t) == t) {
						int cur = f[~c & 1][s], st = s ^ t;
						for (int i = 0; i < n; ++i)
							if (st >> i & 1) cur += g[i];
						chkmax(f[c & 1][t], cur);
					}
			return;
		};
		auto cycle_shift = [&]() -> void {
			int t = g[n - 1];
			for (int i = 0; i < n; ++i)
				std::swap(t, g[i]);
			return;
		};
		for (int i = 0; i < n; ++i)
			solve(), cycle_shift();
	}
	std::cout << f[m & 1][(1 << n) - 1] << '\n';
	return;
}

int main() {
	freopen("happygameT1.in", "r", stdin);
	freopen("happygameT1.out", "w", stdout);
	std::cin.tie(nullptr)->sync_with_stdio(false);
	int t;
	std::cin >> t;
	while (t--) work();
	return 0;
}