【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)
题干:
链接: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,均摊时间优化)相关推荐
- 2019牛客暑期多校训练营(第三场)H.Magic Line
2019牛客暑期多校训练营(第三场)H.Magic Line 题目链接 题目描述 There are always some problems that seem simple but is diff ...
- 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∗ ...
- 2019牛客暑期多校训练营(第四场)----E- triples II
首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/884/E 来源:牛客网 涉及:位运算,容斥定义,dp 点击这里回到2019牛客暑期多校训练营解题-目 ...
- 2019牛客暑期多校训练营(第七场)D Number(思维)
链接:https://ac.nowcoder.com/acm/contest/887/D 来源:牛客网 题目描述 I have a very simple problem for you. Given ...
- 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)
题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...
- 暑假N天乐【比赛篇】 —— 2019牛客暑期多校训练营(第二场)
最近几天都没写博客,真是没什么时间写了,专题卡着,一周四场比赛,场场爆零,补题都补傻了.第一场还差两题可能今天补掉吧,昨天的杭电也是完全没动,感觉...很烦 第二场牛客断断续续也是补了几天...大概一 ...
- 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)
题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...
- 【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)
题干: 链接:https://ac.nowcoder.com/acm/contest/882/D 来源:牛客网 Given a vertex-weighted graph with N vertice ...
- 2019牛客暑期多校训练营(第一场)E-ABBA(dp)
链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
最新文章
- lol12月25服务器维护,lol12月10日维护到几点 英雄联盟12月10日10.25版本更新维护时间...
- Python编程基础:第二十八节 随机数Random Numbers
- 作者:沈志宏(1977-),男,博士,中国科学院计算机网络信息中心高级工程师...
- mysql的面试2_mysql数据库面试题(2)
- 25. ThreadLocal的使用场景
- 乘风新基建!百度大脑如何加速产业智能化升级?
- [渝粤教育] 西南科技大学 运输组织学 在线考试复习资料
- 鸿蒙系统硬盘分区,硬盘分区2种格式
- 从输入URL到页面展现的全过程
- java使用wordnet获取近义词
- 百度搜索移动端流量词热度统计方法
- 为什么电子元器件会老化?像人变老一样吗?
- 使用VirtualDub增加视频的音量
- 幼儿 Android App,中国幼儿园在线app
- 「面试必背」大数据面试题100道(收藏)
- 基于腾讯地图+Ant-Design-Vue封装省市区联动查询组件
- Django框架之视图函数views
- 基于微信小程序的水果销售商城的设计与实现
- 计算机专业的创意文案,高考借势广告文案又双叒叕来了,这些借势扎心了!
- 陷维权风波,冲高端的小米手机过于激进?
热门文章
- php设置cookie值,PHP如何设置和取得Cookie值
- ajax 提交 .net ispostback不执行,ASP.NET基于Ajax的Enter键提交问题分析
- java 读取project_java project 和 java web project 获取路径问题
- JS循环执行函数setInterval
- asp.net web开发步骤_WEB开发流程
- php进入文件目录,php文件目录操作
- UML类图与类间六种关系表示
- UE4打包后如何调试
- 如何将多个源文件编译为一个.ko
- wireshark分析SIP协议——注册