P1559 运动员最佳匹配问题 by hyl 天梦

#include<iostream>
using namespace std;
int n;
int maxx[21][21];
int lie[21];
int aa[21];
int ans;
void dfs(int x,int sum)
{
	if(x>n)
	{
		ans=max(ans,sum);
		return;
	}
	int vv=0;
	for(int p=x;p<=n;p++)
	{
		vv+=aa[p];
	}
	if(sum+vv<ans) return;
	for(int i=1;i<=n;i++)
	{
		if(lie[i]==0)
		{
			lie[i]=1;
			sum+=maxx[x][i];
			x++;
			dfs(x,sum);
			x--;
			lie[i]=0;
			sum-=maxx[x][i];
		}
	}
}
void print()
{
	cout<<endl;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<maxx[i][j]<<" ";
		}
		cout<<endl;
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>maxx[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			int qwe;
			cin>>qwe;
			maxx[j][i]*=qwe;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			aa[i]=max(aa[i],maxx[i][j]);
		}
	}
	//print();
	dfs(1,0);
	cout<<ans;
	return 0;
}

  

原文地址:https://www.cnblogs.com/TianMeng-hyl/p/12205248.html