(卡常)求调 TLE 59 pts
查看原帖
(卡常)求调 TLE 59 pts
908514
DHT666楼主2025/1/8 17:07
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 20;

int n, m;
LL s;
int a[N][N];
LL l[N];

unordered_map<LL, PII> Map;

int main() {
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);

	scanf("%d%d", &n, &m);
	
	LL sum = 0;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			scanf("%d", &a[i][j]);
			sum += a[i][j];
		}
	}
	scanf("%lld", &s);
	
	if(sum == s) {
		puts("YES");
		printf("0");
		return 0;
	}

	int res = 2e9;
	int t1 = 0, t2 = 0, t3 = 0;
	for(int i = 0; i < (1 << n); i++) {
		int re = n;
		for(int j = 1; j <= n; j++) {
			if((i >> j - 1) & 1) {
				re--;
			} 
		}
		for(int j = 1; j <= m; j++) {
			l[j] = 0;
			for(int k = 1; k <= n; k++) {
				if((i >> k - 1) & 1) {
					l[j] += a[k][j];
				}
			}
		}
		Map.clear();
		for(int j = 0; j < (1 << m / 2); j++) {
			LL t = 0;
			int p = m / 2;
			for(int k = 1; k <= m / 2; k++) {
				if((j >> k - 1) & 1) {
					t += l[k];
					p--;
				}
			}
			PII q = Map[t];
			if(q.first == 0 && q.second == 0) Map[t] = {j, p};
			else {
				if(q.second > p) {
					Map[t] = {j, p};
				}
			}
		}
		for(int j = 0; j < (1 << m - m / 2); j++) {
			LL t = 0;
			int p = m - m / 2;
			for(int k = 1; k <= m - m / 2; k++) {
				if((j >> k - 1) & 1) {
					t += l[m / 2 + k];
					p--;
				}
			}
			PII q = Map[s - t];
			if(q.second || q.first) {
				if(p + q.second + re < res) {
					res = p + q.second + re;
					t1 = q.first;
					t2 = j;
					t3 = i;
				}
			}
		}
	}

	if(res == 2e9) puts("NO");
	else {
		puts("YES");
		printf("%d\n", res);
		for(int i = 1; i <= n; i++) {
			if(!((t3 >> i - 1) & 1)) {
				printf("1 %d\n", i);
			}
		}
		for(int i = 1; i <= m / 2; i++) {
			if(!((t1 >> i - 1) & 1)) {
				printf("2 %d\n", i);
			}
		}
		for(int i = 1; i <= m - m / 2; i++) {
			if(!((t2 >> i - 1) & 1)) {
				printf("2 %d\n", m / 2 + i);
			}
		}
	}

	return 0;
}

觉得可能是 map 存了个 pair 的原因,但不知道怎么优化。

2025/1/8 17:07
加载中...