题目链接:传送门

题面:

【题意】

  给定2×n个人的相互竞争值,请把他们分到两个队伍里,如果是队友,那么竞争值为0,否则就为v[i][j]。

【题解】

  爆搜,C(28,14)*28,其实可以稍加优化,因为分到两个队伍,所以第一个人肯定会分到一个队伍中,搜索可以有,C(27.13)*28,其实可以稍加剪枝,其实这个剪枝有点模糊,就是统计第i个人能产生的最大竞争值,当在过程中这个最大竞争值+当前值 < 暂存答案时,即为剪枝,【最优化剪枝】。

【代码】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int a[N],b[N];
int A,B,n;
ll v[N][N],ans;
void dfs(int pos,ll sum){
if ( A > n || B > n ){
return ;
}
if ( A == n && B == n ){
ans = max(ans,sum);
return ;
}
if( A < n ){
a[++A] = pos ;
for(int i=;i<=B;i++){
sum += v[pos][b[i]] ;
}
dfs( pos+ , sum );
for(int i=;i<=B;i++){
sum -= v[pos][b[i]];
}
A--;
}
if( B < n ){
b[++B] = pos ;
for(int i=;i<=A;i++){
sum += v[pos][a[i]] ;
}
dfs( pos+ , sum );
for(int i=;i<=A;i++){
sum -= v[pos][a[i]];
}
B--;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=*n;i++){
for(int j=;j<=*n;j++){
scanf("%lld",&v[i][j]);
}
}
dfs(,);
printf("%lld\n",ans);
return ;
}

爆搜写法

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int a[N],b[N],A,B,n;
ll v[N][N],p[N],Maxn[N],sum[N];
ll res , ans ;
void dfs(int pos ){
if ( A == n && B == n ){
res = max( res , ans );
return ;
}
if( ans + sum[pos] < res ) //当前答案加上后缀 < 已存答案
return ;
if( A < n ){
ll tmp = ans ;
a[++A] = pos ;
for(int i=;i<=B;i++)
ans += v[pos][b[i]];
dfs( pos+ ) ;
A--;
ans = tmp ;
}
if( B < n ){
ll tmp = ans ;
b[++B] = pos ;
for(int i=;i<=A;i++)
ans += v[pos][a[i]];
dfs( pos+);
B--;
ans = tmp ;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=*n;i++){
for(int j=;j<=*n;j++){
scanf("%lld",&v[i][j]);
}
}
for(int i=;i<=*n;i++){
for(int j=;j<=*n;j++){
p[j] = v[i][j];
}
sort( p+,p++*n);
for(int j=n+;j<=*n;j++){
Maxn[i] += p[j] ;
}
}
//预处理sum后缀和,可以在过程中加入进行剪枝
for(int i=*n;i>=;i--){
sum[i] = sum[i+] + Maxn[i] ;
}
A = ;
a[] = ;
dfs();
printf("%lld\n",res);
return ;
}

稍加剪枝写法

【搜索】Partition problem的更多相关文章

  1. The Painter's Partition Problem Part II

    (http://leetcode.com/2011/04/the-painters-partition-problem-part-ii.html) This is Part II of the art ...

  2. 2019牛客多校第二场F Partition problem 暴力+复杂度计算+优化

    Partition problem 暴力+复杂度计算+优化 题意 2n个人分成两组.给出一个矩阵,如果ab两个在同一个阵营,那么就可以得到值\(v_{ab}\)求如何分可以取得最大值 (n<14 ...

  3. The Painter's Partition Problem Part I

    (http://leetcode.com/2011/04/the-painters-partition-problem.html) You have to paint N boards of leng ...

  4. 2019牛客暑期多校训练营(第二场) - F - Partition problem - 枚举

    https://ac.nowcoder.com/acm/contest/882/F 潘哥的代码才卡过去了,自己写的都卡不过去,估计跟评测机有关. #include<bits/stdc++.h&g ...

  5. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  6. 2019年牛客多校第二场 F题Partition problem 爆搜

    题目链接 传送门 题意 总共有\(2n\)个人,任意两个人之间会有一个竞争值\(w_{ij}\),现在要你将其平分成两堆,使得\(\sum\limits_{i=1,i\in\mathbb{A}}^{n ...

  7. 2019牛客多校2 F Partition problem(dfs)

    题意: n<=28个人,分成人数相同的两组,给你2*n*2*n的矩阵,如果(i,j)在不同的组里,竞争力增加v[i][j],问你怎么分配竞争力最 4s 思路: 枚举C(28,14)的状态,更新答 ...

  8. 2019牛客多校第二场F Partition problem(暴搜)题解

    题意:把2n个人分成相同两组,分完之后的价值是val(i, j),其中i属于组1, j属于组2,已知val表,n <= 14 思路:直接dfs暴力分组,新加的价值为当前新加的人与不同组所有人的价 ...

  9. 2019牛客多校第二场F-Partition problem(搜索+剪枝)

    Partition problem 题目传送门 解题思路 假设当前两队的对抗值为s,如果把红队中的一个人a分配到白队,s+= a对红队中所有人的对抗值,s-= a对白队中所有人的对抗值.所以我们可以先 ...

随机推荐

  1. hdu6736(寻找最小环)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6736 题意: 在给定图中寻找所有最小环 保证不存在一条边经过两个简单环 数据范围: $1\leq n ...

  2. POJ 2778 DNA Sequence —— (AC自动机+矩阵快速幂)

    距离上次做AC自动机有很久了=.=,以前这题的思路死活看不懂,现在还是觉得很好理解的. 思路参见:http://blog.csdn.net/morgan_xww/article/details/783 ...

  3. fok函数

    一.fork函数是什么 fork函数将运行着的程序分成2个(几乎)完全一样的进程.如下图: 进程1在进程关系中我们称之为父进程,进程2就是通过fork产生的,我们叫他子进程.这两个进程在fork执行完 ...

  4. vue实现全选框效果

    vue实现全选框效果 一.总结 一句话总结: 全选的checkbox点击的时候判断这个checkbox的状态,如果没选中,说明下一个操作是选中所有 下面的每个checkbox判断一下是否所有的chec ...

  5. 如何在CentOS 7上安装Memcached(缓存服务器)

    首先更新本地软件包索引,然后使用以下yum命令从官方CentOS存储库安装Memcached. yum update yum install memcached 接下来,我们将安装libmemcach ...

  6. 自己写了个简单的redis分布式锁【我】

    自己写了个简单的redis分布式锁 [注意:此锁需要在每次使用前都创建对象,也就是要在线程内每次都创建对象后使用] package redis; import java.util.Collection ...

  7. vector swap

    #include <iostream>#include <vector>#include <list>#include <deque> using na ...

  8. mfc移动文件夹

    SHFILEOPSTRUCT FileOp; ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT)); FileOp.fFlags = FOF_NO ...

  9. 游戏数值——LOL篇 以LOL为起点-说游戏数值设计核心思路

      附     文   文档在今年三月份我动笔写了一小部分,但当时思路凌乱,行文梗阻,于是丢在一边构思了半年,现在又回过头来慢慢写,希望能写好写完吧,初衷是希望即时萌新也能看懂,但是好像并不能行——本 ...

  10. unity三维地球模型生成

    准备一张贴图   创建材质球 球面坐标系转直角坐标系 x=rsinθcosφ. y=rsinθsinφ. z=rcosθ. 效果如下   脚本如下 using System.Collections; ...