Atcoder abc187 F Close Group 题目 给出一张n个点,m条边的无向图,问删除任意数量的边后,留下来的最少数量的团的个数(\(n \le 18\) ) 题解 核心:枚举状态+动态规划 第一次枚举状态,对状态进行预处理,判断状态里所有的1是否能够形成一个团 第二次枚举状态S,再对每个状态枚举子状态T,假如T是一个团,那么 就可以进行动态递推 \[dp[S]=min(dp[S],dp[S\wedge T]+1) \] 复杂度分析 状态S中1的个数有x个,那S的子集就有 \(2…
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC002F.html 题目传送门 - AGC002F 题意 给定 $n,k$ ,表示有 $n\times k$ 个球,其中,颜色为 $1,2,\cdots, n$ 的球各有 $k$ 个. 将这些球任意排列成一排,对于每一种颜色,将这种颜色的球的最左边的那个涂成颜色 $0$ . 问最终可以得到多少种不同的排列. $1\leq n,k\leq 2000,{\rm Mod} = 10^9 +7$ 题解 首先当 $…
[题目]F. Group Projects [题意]给定k和n个数字ai,要求分成若干集合使得每个集合内部极差的总和不超过k的方案数.n<=200,m<=1000,1<=ai<=500. [算法]动态规划 [题解]每个集合的最小值和最大值非常重要,将序列从小到大排序后,每个集合可以视为最小值到最大值的一条线段. 设$f[i][j][k]$表示前i个数,当前有j条线段没有结束,总和为k的方案数. 转移的关键在于集合权值的拆分,转化为算每个数的贡献.数字a[i+1]的贡献就是覆盖的线段…
http://s8pc-3.contest.atcoder.jp/tasks/s8pc_3_f (题目链接) 题意 有一个长度为$N$的数列$A$,初始为$0$.$Q$次操作,每次两个参数$x,y$. 在$A[1]...A[x]$中找出最小的数,如果有多个找编号最小的,假设为$u$. $A[u]++$. 重复这个过程$y$次. 输出最后的$A$序列. Solution 可以发现,数列$A$肯定是单调不降的,那就非常好做了. 用一个线段树维护数列,区间赋值,支持区间求和.在询问区间中二分找到一个位…
霍尔定理 + 线段树? 咱学学霍尔定理... 霍尔定理和二分图完美匹配有关,具体而言,就是定义了二分图存在完美匹配的充要条件: 不妨设当前二分图左端集合为 X ,右端集合为 Y ,X 与 Y 之间的边集为 E 令 \(\omega(x)\) 表示在 Y 中能通过 E 与 x 中元素相连的元素数量,那么 $\forall x\in X, |x| \le |\omega(x)| $ 为 X 与 Y 存在完美匹配的充要条件... 然后咱发现,多加上 t 个人的话,也就是必然会让 \(|\omega(x…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 L,连续至少 L 个相同的数 k 可以合并成 1 个 k+1. 给定一个长度为 N 的序列,问该序列有多少个子区间可以通过若干次合并变成 1 个数. Constraints 1≤N≤2×10^5, 2≤L≤N, 1≤Ai≤10^9 Input 输入形式如下: N L A1 A2 ... AN Output 输出满足条件的子区间个数. Sample Inpu…
Atcoder ARC060 F 题意:给一个串,求将其分成最少的没有循环节的串的种数. 思路:先求KMP的\(fail\)数组.然后发现最少的串数只有三种可能:\(1\).\(2\).\(n\). 然后就可以用KMP找原串的循环节,如果原串没有循环节,那么不用分.如果原串的循环节为\(1\),则要分成一个一个的,如果循环节为\(2\),则要看每个前缀和后缀是否有循环节,如果对于一个前缀即与之相邻的后缀都是无循环节的,那么答案数要\(+1\).…
题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum_{i=1}^ta[e_i]}{\sum_{i=1}^tb[v_i]}< ans \\ \therefore\sum a[e_i]-ans*b[v_i]=\sum a[e_i]-ans<0 \] 则问题就变成了判断图内是否存在一个负环... 时间复杂度:\(O(nmlog)\) #include…
现在是晚上十二点半,好累(无奈脸),接着给各位——也是给自己,更新笔记吧~ 序列型状态划分: 经典例题:乘积最大(Luogu 1018) * 设有一个长度为 N 的数字串,要求选手使用 K 个乘号将它分成 K+1 个部分,找出一种分法,使得这 K+1 个部分的乘积能够为最大.* 例如,有一个数字串: 312,当 N=3, K=1 时会有以下两种分法:1 3×12=362 31×2=62* 符合题目要求的结果是: 31×2=62* 现在,请你帮助你的好朋友 XZ 设计一个程序,求得正确的答案.*…
链接:https://ac.nowcoder.com/acm/contest/912/F 题意: 动态规划(Dynamic programming,简称dp)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法.例如,假设小x一步能爬1层或2层台阶,求小x爬n层台阶共有几种方法,就可以用dp计算:设FiFi代表小x爬i层台阶共有几种方法,则Fi=Fi−1+Fi−2Fi=Fi−1+Fi−2. 小x是练习时长两年半的acm练习生,喜欢口胡.dp.线段树.妙就妙在,不管是什么题目,无论多难…