2019牛客暑期多校2-Partition problem深搜

在这里插入图片描述
输入

1
0 3
3 0

输出

3

题意:
将2*n个人分成两部分,每部分都有n个人
而且每个人只能属于一个组,问按照给出的算式得到的竞争力最大值是多少

ll n,ans = 0;
ll a[40][40];
int sel[40];
ll sum[maxn];
int r = 0;
void dfs(ll curval,int pos){
	if(r == n) {
		ans = max(ans,curval);
		return ;
	}
	if(pos >= 2 * n + 1 || r > n) return ;
	
	ll s = sum[pos];
	for(int i=1;i<=r;i++){
		int t = sel[i];
		s -= 2 * a[pos][t];
	}
	r ++;
	sel[r] = pos;
	dfs(curval + s,pos+1);
	r --;
	dfs(curval,pos+1);
}
int main() {
	n = read;
	for(int i=1;i<=2*n;i++){
		for(int j=1;j<=2*n;j++) a[i][j] = read,sum[i] += a[i][j];
	}
	ans = 0;
	dfs(0,1);
	cout << ans <<endl;
	return 0;
}
posted @ 2021-08-13 13:02  PushyTao  阅读(12)  评论(0编辑  收藏  举报