Partition problem 暴力+复杂度计算+优化 题意 2n个人分成两组.给出一个矩阵,如果ab两个在同一个阵营,那么就可以得到值\(v_{ab}\)求如何分可以取得最大值 (n<14) 分析 经过复杂度计算我们可以算出28!2828过⑧了,但是28!28可以过,所以我们思考一下怎么优化计算阵营值得过程.可以考虑一种dp得思想,当选择这个人进A阵营时,后面所以得人进A阵营都会得到A得值,所以只要把这个人的贡献加到后面所有可选择的人的进A阵营的贡献即可,每次选一个人的时候,只要把当前的人…
题意:把2n个人分成相同两组,分完之后的价值是val(i, j),其中i属于组1, j属于组2,已知val表,n <= 14 思路:直接dfs暴力分组,新加的价值为当前新加的人与不同组所有人的价值.复杂度$O(C_{2n}^n * n)$. 大概6e8这样子, 代码: #include<cmath> #include<set> #include<map> #include<queue> #include<cstdio> #include&l…
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n-1,从0号点出发,每次向左走或者向右走的概率是相同的,问你出发后,经过n-1个点后,恰好到达点m的概率是多少,答案是一个前缀积 题解: 讨论两个点的情况: 点0->1的期望是1 讨论三个点的情况 假设我们要到点3,我们必须经过点2,然而我们到了点2可能会再回到点1再到达点3,所以我们讨论必须经过的…
题目链接 传送门 题意 总共有\(2n\)个人,任意两个人之间会有一个竞争值\(w_{ij}\),现在要你将其平分成两堆,使得\(\sum\limits_{i=1,i\in\mathbb{A}}^{n}\sum\limits_{j=1,j\in\mathbb{B}}^{n}w_{ij}\)最大. 思路 看到这一题第一想法是状态压缩然后枚举状态,然后人就没了. 其实这题就是个普通的\(dfs\),假设在枚举第\(i\)个人时,前面已经有\(tot1\)个人分进了\(\mathbb{A}\),\(t…
题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保证没有三线共点或者两直线重合,\(n\leq 1000,\ m\leq 10000\) 题解:先考虑最多会有多少个区域,由于第\(i\)条直线最多与前面的\(i-1\)条直线同时相交,所以交点个数和区域个数都是\(n^2\)级别的,考虑求出所有区域的面积并排序 首先预处理所有的交点,并记录与该交点相…
题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目大意 给定一个 n * m 的 01 矩阵,求其中第二大的子矩阵,子矩阵元素必须全部为 1.输出其大小. 分析1(前缀和,O(NM2)) 这题数据没那么强,所以用前缀和暴力枚举也能过. 代码如下 #include <bits/stdc++.h> using namespace std; #define INIT() ios::sync_with_stdio(false);cin.tie(0);co…
Second Large Rectangle 题目传送门 解题思路 先求出每个点上的高,再利用单调栈分别求出每个点左右两边第一个高小于自己的位置,从而而得出最后一个大于等于自己的位置,进而求出自己的位置的高为高,这个点所在的边为底的最大矩形.这些求出的矩形中的最大值即为可求出的最大矩形.而次大值可能是这些矩形之一,也可能是这些矩形的高减1或者宽减1得到的矩形.所以把这些全都记录下来,第二大的即为答案.由于这样求出的矩形会有重复,所以记录一下坐标来去重. 代码如下 #include <bits/s…
题目链接:https://ac.nowcoder.com/acm/contest/882/A 题目大意:圆上有\(n\)个点,标号从\(0\)到\(n-1\),初始一个人在点\(0\),每次会等概率向左或向右移动一步,如果某一时刻所有点均被访问过则停止移动,问最终停留在\(m\)点的概率 题解:若\(m \neq 0\)且\(n \neq 1\),则\(ans=\frac{1}{n-1}\),具体证明如下 若设答案为\(f(n,m)\),可以发现这个函数有如下性质: 1.函数是关于零点对称的,即…
题目链接:https://ac.nowcoder.com/acm/contest/882/E 题目大意:有一个\(n\times m\)的01矩阵,一开始可以从第一行的一个点出发,每次可以向左.向右.向下移动一格且不能回头.中途会有一些点变为障碍物(用1表示),或者从障碍物变回可以通过的格子,同时还需要处理询问:从\((1,a)\)出发,走到\((n,b)\)的方案数有多少种.\(n\leq 50000,\ m\leq 10\) 题解:设\(f(i,j)\)为走到\((i,j)\)的方案数,且第…
试了很多种爆搜和剪枝,最后发现还是状压的比较好用 #include <bits/stdc++.h> using namespace std; // #define IO #define fi first #define se second #define pb push_back #define mk make_pair #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r #define rep(i,s,t) fo…