题目链接:传送门

题面:

【题意】

  给定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. Robot Framework(十六) 扩展RobotFramework框架——使用监听器接口

    4.3使用监听器接口 Robot Framework有一个侦听器接口,可用于接收有关测试执行的通知.监听器是具有某些特殊方法的类或模块,它们可以用Python和Java实现.监听器接口的示例用法包括外 ...

  2. Pluck CMS 4.7.10远程代码执行漏洞分析

    本文首发于先知: https://xz.aliyun.com/t/6486 0x01漏洞描述 Pluck是用php编写的一款的小型CMS影响版本:Pluck CMS Pluck CMS 4.7.10( ...

  3. xpath 轴定位表达方式

    xpath的使用基本语法: 1.// 从根节点开始,查找对象是全文. 2./ 从当前标签的路径开始查找 3.text()获取当前路径下的文本 4.@+类名或者id名 查找类名或者id的名字 5. .一 ...

  4. ios TCP抓包

    1.工具安装 Mac15.1 ,Xcode11.2.1 这一步有个小坑,我第一次执行rvictls -s 提示 rvictl: command not found.Stack Overflow上提供了 ...

  5. linux的最简socket编程

    一.背景 好久没有进行linux下的socket编程了,复习一下 二.服务端完整代码 #include <stdio.h> #include <stdlib.h> #inclu ...

  6. 002-log-log4j

    一.概述 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...

  7. [工具]tcping检查开放的端口

    tcping小工具是一款用于tcp监控的软件.tcping小工具可以时刻监控服务器的网络情况,包括ping值和端口状态,可以突破机房和服务器的禁用设置,是一款十分实用的网络分析小工具. 下载地址:ht ...

  8. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_19-页面静态化-模板管理-模板存储

    因为没有界面,所以手动的通过操作数据库的方式来存储 比如说要存一个轮播图的模板 把自增的_id去掉 先用测试程序把文件存储到gridFS得到一个gridId,然后拿着这个文件的id 这样就添加好了这一 ...

  9. php错误机制总结

    转 http://www.cnblogs.com/yjf512/p/5314345.html

  10. iOS——归档对象的创建,数据写入与读取

    归档(archiving)是指另一种形式的序列化,但它是任何对象都可以实现的更常规的模型.专门编写用于保存数据的任何模型对象都应该支持归档.比属性列表多了很良好的伸缩性,因为无论添加多少对象,将这些对 ...