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

Posted PushyTao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

以上是关于2019牛客暑期多校2-Partition problem深搜的主要内容,如果未能解决你的问题,请参考以下文章

2021牛客暑期多校训练营2

2021牛客暑期多校训练营4

2021牛客暑期多校训练营9

2021牛客暑期多校训练营3

2021牛客暑期多校训练营5

2021牛客暑期多校训练营1