测试点#1 1.20s TLE 求助
查看原帖
测试点#1 1.20s TLE 求助
548062
HSZ_1202楼主2022/8/12 19:02
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int n, p[25][25], q[25][25], f[25], s, ans;
int maxs[25], maxsum[25];
bool vis[25];

void dfs(int step) // 枚举第step个位置选择女运动员的编号
{
	if (s + maxsum[step] <= ans)
	{
		return;
	}
	if (step == n + 1)
	{
		ans = max(ans, s);
		return ;
	}
	for (int i = 1; i <= n; i++)
		if (!vis[i])
		{
			f[step] = i;
			vis[i] = true;
			s += p[step][i] * q[i][step];
			dfs(step + 1);
			vis[i] = false;
			s -= p[step][i] * q[i][step];
		}
}

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			cin >> p[i][j];
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			cin >> q[i][j];
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			maxs[i] = max(maxs[i], p[i][j] * q[j][i]);
		}
	}
	for (int i = n; i >= 1; i--)
	{
		maxsum[i] = maxsum[i + 1] + maxs[i];
	}
	dfs(1);
	
	cout << ans << endl;
	return 0;
}	
//小猴编程(8917341311654474)
2022/8/12 19:02
加载中...