题干:

链接:https://ac.nowcoder.com/acm/contest/882/F
来源:牛客网

Given 2N people, you need to assign each of them into either red team or white team such that each team consists of exactly N people and the total competitive value is maximized.

Total competitive value is the summation of competitive value of each pair of people in different team.

The equivalent equation is ∑i=12N∑j=i+12N(vij if i-th person is not in the same team as j-th person else 0)\sum_{i=1}^{2N} \sum_{j=i+1}^{2N} (v_{ij} \text{ if i-th person is not in the same team as j-th person else } 0 )∑i=12N​∑j=i+12N​(vij​ if i-th person is not in the same team as j-th person else 0)

输入描述:

The first line of input contains an integers N.Following 2N lines each contains 2N space-separated integers vijv_{ij}vij​ is the j-th value of the i-th line which indicates the competitive value of person i and person j.* 1≤N≤141 \leq N \leq 141≤N≤14
* 0≤vij≤1090 \leq v_{ij} \leq 10^{9}0≤vij​≤109
* vij=vjiv_{ij} = v_{ji}vij​=vji​

输出描述:

Output one line containing an integer representing the maximum possible total competitive value.

示例1

输入

复制

1
0 3
3 0

输出

复制

3

题目大意:

时限4秒。

将2*n个人分到两个team,每个team必须恰好有n个人,如果i,j两个人位于不同的team,那么收益增加 a[i][j],求分配的最大收益

第一行输入n

第二行输入一个(2*n)*(2*n)的矩阵。

求最大收益。

解题报告:

最暴力的方法是C(2*n,n)枚举,但是最后对于每一种情况算答案的时候需要n^2处理,这样总复杂度就是O( C(2*n,n) * n^2 ),在n=14的情况下是会T的。想办法优化掉一个N。(  C(28,14) = 40116600)

可以这么转化一下问题,其实可以看成本来2*n个人都在一个team中,现在要拽其中一些人去另一个team,所以每当拽一个人去另一个team的时候,就减去对应的贡献。这样的好处就是,把最后统计需要On^2的时间均摊到每一次的dfs中线性完成,这样总复杂度就是O( C(2*n,n) * n ),可以接受。这题时限4秒。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
const ll mod = 1e9 + 7;
ll ma;
vector<int> v;
int n;
ll a[33][33],d[33];//d[i]代表i和其他所有点连边的权值和。
void dfs(ll x,ll ans) {if(v.size()==n) {ma = max(ma,ans); return ;}if(v.size()>n || x>=2*n) return ;ll now=d[x];for(auto s:v) now -= a[x][s]*2;//选 v.push_back(x);dfs(x+1,ans+now);//不选 v.pop_back();dfs(x+1,ans);
}
int main()
{scanf("%d",&n);for(int i=0; i<2*n; i++)for(int j=0; j<2*n; j++) {scanf("%lld",&a[i][j]);d[i]+=a[i][j];}dfs(0,0);cout << ma <<endl;return 0 ;
}

【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)相关推荐

  1. 2019牛客暑期多校训练营(第三场)H.Magic Line

    2019牛客暑期多校训练营(第三场)H.Magic Line 题目链接 题目描述 There are always some problems that seem simple but is diff ...

  2. 2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)

    2019牛客暑期多校训练营(第五场)C generator 2 思路 x0=x0x_0 = x_0x0​=x0​ x1=a∗x0∗bx_1 = a * x_0 * bx1​=a∗x0​∗b x2=a∗ ...

  3. 2019牛客暑期多校训练营(第四场)----E- triples II

    首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/884/E 来源:牛客网 涉及:位运算,容斥定义,dp 点击这里回到2019牛客暑期多校训练营解题-目 ...

  4. 2019牛客暑期多校训练营(第七场)D Number(思维)

    链接:https://ac.nowcoder.com/acm/contest/887/D 来源:牛客网 题目描述 I have a very simple problem for you. Given ...

  5. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...

  6. 暑假N天乐【比赛篇】 —— 2019牛客暑期多校训练营(第二场)

    最近几天都没写博客,真是没什么时间写了,专题卡着,一周四场比赛,场场爆零,补题都补傻了.第一场还差两题可能今天补掉吧,昨天的杭电也是完全没动,感觉...很烦 第二场牛客断断续续也是补了几天...大概一 ...

  7. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...

  8. 【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/D 来源:牛客网 Given a vertex-weighted graph with N vertice ...

  9. 2019牛客暑期多校训练营(第一场)E-ABBA(dp)

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

最新文章

  1. lol12月25服务器维护,lol12月10日维护到几点 英雄联盟12月10日10.25版本更新维护时间...
  2. Python编程基础:第二十八节 随机数Random Numbers
  3. 作者:沈志宏(1977-),男,博士,中国科学院计算机网络信息中心高级工程师...
  4. mysql的面试2_mysql数据库面试题(2)
  5. 25. ThreadLocal的使用场景
  6. 乘风新基建!百度大脑如何加速产业智能化升级?
  7. [渝粤教育] 西南科技大学 运输组织学 在线考试复习资料
  8. 鸿蒙系统硬盘分区,硬盘分区2种格式
  9. 从输入URL到页面展现的全过程
  10. java使用wordnet获取近义词
  11. 百度搜索移动端流量词热度统计方法
  12. 为什么电子元器件会老化?像人变老一样吗?
  13. 使用VirtualDub增加视频的音量
  14. 幼儿 Android App,中国幼儿园在线app
  15. 「面试必背」大数据面试题100道(收藏)
  16. 基于腾讯地图+Ant-Design-Vue封装省市区联动查询组件
  17. Django框架之视图函数views
  18. 基于微信小程序的水果销售商城的设计与实现
  19. 计算机专业的创意文案,高考借势广告文案又双叒叕来了,这些借势扎心了!
  20. 陷维权风波,冲高端的小米手机过于激进?

热门文章

  1. php设置cookie值,PHP如何设置和取得Cookie值
  2. ajax 提交 .net ispostback不执行,ASP.NET基于Ajax的Enter键提交问题分析
  3. java 读取project_java project 和 java web project 获取路径问题
  4. JS循环执行函数setInterval
  5. asp.net web开发步骤_WEB开发流程
  6. php进入文件目录,php文件目录操作
  7. UML类图与类间六种关系表示
  8. UE4打包后如何调试
  9. 如何将多个源文件编译为一个.ko
  10. wireshark分析SIP协议——注册