![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
WorldWide_D
这个作者很懒,什么都没留下…
展开
-
[codeforces955F] Heaps
题目大意我们称一个有根树的节点u是 k-ary heap of depth m 的,当且仅当其满足以下条件之一: 1. m=1 2. m>1,u有至少k个儿子是至少 k-ary heap of depth m-1的(即儿子可以是 k-ary heap of depth n的,n≥m) 给定一个n个节点的有根树(1是树根)。设dp[k][u]表示一个最大的m,满足u为根的子树中存在节点是 k-a原创 2018-03-26 21:47:52 · 722 阅读 · 0 评论 -
[codeforces582D]Number of Binominal Coefficients
题目大意给定质数p和正整数α、k,求多少对(n,k)满足0≤m≤n≤α 且CmnC_{n}^m是pkp^k的倍数p,k≤10910^9 n≤10100010^{1000}分析此题要用到库默尔定理:设m,n为正整数,p为素数,则Cnm+nC_{m+n}^n含p的幂次等于p进制下m与n相加的进位次数。 有了这个定理就可以很好地解题了。先把n转化为p进制,然后考虑数位DP。设f[i][j][x][y]原创 2017-08-22 19:36:47 · 681 阅读 · 0 评论 -
[bzoj4976]宝石镶嵌
题目大意给定n个数以及k,要求将n个数去掉k个,剩下的值or起来最大。n≤100000 k≤100 每个数是不大于100000的正整数分析假设所有数中总共sum个二进制位出现过1,那么当n-k≥sum时,每个1都一定可以出现。当n-k < sum时,n最大只有116,可以设f[i][j]表示前i个数,or和为j最多可以去掉多少个数,转移很简单。#include <cstdio>#include原创 2017-08-24 20:55:51 · 723 阅读 · 0 评论 -
[bzoj1808]/[Ioi2007]training 训练路径
题目大意给定n个点m条边的无向图,你需要删掉一些边,使得此图没有长度为偶数的简单环。 删掉第i条边有Ci的花费,有些边又是不能删的。不能删的边形成图的一棵生成树。 n≤1000 m≤5000 点的度数不超过10分析首先一条非树边的两个端点在树上的距离为奇数就必须删掉。 考虑剩下的边,如果两条边覆盖的树的路径有公共边,那么也是不能同时存在的。 那么问题变成:保留一些非树边,使得图是一个仙人原创 2017-08-20 19:45:24 · 935 阅读 · 0 评论 -
[codeforces830D]Singer House
题目大意给定n,现有深度为n的满二叉树,对于一个节点,给它与它的所有父亲连一条边。 问:得到的新的图有多少条不同的简单路径(1->2和2->1算不同路径)答案模1,000,000,007 n≤400分析关键在于如何设好状态 设f[i][j]表示深度为i的满二叉树中,存在j条路径的方案数。可以枚举i,然后枚举两棵子树大小,然后分类讨论转移(讨论时注意细节,比如路径的方向)。 第二维可能会很大。原创 2017-08-09 21:47:53 · 583 阅读 · 0 评论 -
[bzoj4870] [Shoi2017]组合数问题
题目大意略…分析注意到一个重要的条件:t< k 那么根据组合数的意义,可以理解为从nk件物品里取若干件,满足取出物件数量模k等于t的方案数。 又发现k很小,然后可以设出DP:设f[i][j]表示前i件物品取的件数模k等于j的方案数。转移很显然。 用矩阵乘法可以做到O(k3lognk)O(k^3lognk) 然而这个DP满足结合律,即假设我们已经求出了数组f[n][],可以求出f[2n][],原创 2017-07-09 21:18:26 · 534 阅读 · 0 评论 -
[bzoj4550] 小奇的博弈
题目大意略…分析首先单独分析一对石子(相邻的且左边白右边黑):第一步如果白棋向右走,可以把间隔减小任意步,轮到黑棋的时候,黑棋显然也可以减小间隔。如果某一方无法缩小间隔,而往另一方向,另一方可以再贴上去,走反方向显然不是最优的。 然后就可以把一对石子看成一堆石子了。 现在有k/2对石子,每次可以选择1到d对,那么就是NimK问题。NimK先手必败的条件:把每堆石子看成二进制,对于二进制每一位,所原创 2017-07-14 15:13:17 · 814 阅读 · 0 评论 -
[CF822E]Liar
题目大意给定两个字符串S和T。你可以把S分成若干段,从左到右从1开始编号。现在要从你分出来的段中取出不超过x段,按编号从小到大依次拼接成字符串T。问是否有可行解。1≤|T|≤|S|≤100000 x≤30分析考虑DP。设f[i][j]表示用了S的前i个字符,取出了j段,最大能得到T的前多少个字符。 转移分两种情况: 1. f[i][j]—>f[i+1][j] 表示字符i+1单独成段且没被选原创 2017-07-11 09:41:24 · 946 阅读 · 0 评论 -
[51nod1324] 相似序列对
题目大意给定N,M,问有多少不同的序列对(A,B)满足: 1. 长度均为N 2. 从A中删去0到2个元素,在B中删去相同数量的数,然后两个序列相同 3. 序列都是[1,M]内的整数答案对109+910^9+9取模,N≤100,1≤M≤1000000000分析第2个条件相当于两个序列的最长公共子序列长度不小于n-2 首先考虑对于两个序列,如何求它们的最长公共子序列。 有一个很清晰的n2n^2原创 2017-04-22 11:43:25 · 541 阅读 · 0 评论 -
【GDOI2017第二轮模拟day1】最长路径
题目大意给定n,求对于i=1…n,从点1出发最长简单路径长度为i的竞赛图数量模一个10^9级别的模数(竞赛图:对于任意点i≠j,它们之间有且只有一条有向边)n≤2000分析做这题需要两个结论。 1. 一个强连通竞赛图必然存在一条哈密顿回路。证明:首先3个点的显然存在,假设k个点的存在一条哈密顿回路,那么现在加入第k+1个点,只要存在回路上相邻两个点p,q,满足p连向k+1,k+1连向q即可。如果没原创 2017-04-15 16:55:55 · 1211 阅读 · 0 评论 -
[bzoj4006] [JLOI2015]管道连接
题目描述小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰。该部门有 n 个情报站,用 1 到 n 的整数编号。给出 m 对情报站 ui;vi 和费用 wi,表示情 报站 ui 和 vi 之间可以花费 wi 单位资源建立通道。 如果一个情报站经过若干个建立好的通道可以到达另外一个情报站,那么这两个情报站就 建立了通道连接。形式化地,若 ui 和 vi 建立了通道,那么它们建立了原创 2017-03-23 22:15:11 · 809 阅读 · 0 评论 -
[bzoj4543] [POI2014]Hotel加强版
题目大意给定一棵树,n个节点,问有多少个三元组(x,y,z)(x < y < z),满足这三个点在树上距离两两相等。 n≤100000分析你可以想到一个n方的dp:设f[i][j]表示i为根的子树中,与i距离为j的节点有多少个。g[i][j]表示i为根的子树中,有多少个二元组(x,y)(x < y)满足:设d表示它们到lca的距离都为d,它们的lca到i的距离为d-j。 那么做到i节点时,先递归原创 2017-09-13 21:37:57 · 850 阅读 · 0 评论 -
博弈
题目大意给定一棵n个节点的树。两个人进行博弈,后手的人最初在节点b上,还给定一个目标节点t。 对于后手的人,如果有至少一条未被标记的边连着它所在的节点,那么它必须选择其中一条走过去,并标记下这条边。否则不用动。 对于先手的人,每次可以:1. 删除一条边 2. 删除一条边的标记 3. 不操作。 现在先手者想以最少的操作次数把后手者赶到目标节点(不操作不计算次数),后手者则想最大化这个答案。两个人原创 2017-09-23 17:25:17 · 337 阅读 · 0 评论 -
[codeforces 917D]Stranger Trees
题目大意给定一棵n个节点的树。对于k=0到n-1,输出有多少棵n个节点的带标号无根树恰好与给定的树有k条公共边。答案模109+710^9+7 n≤100分析我们从prufer序的角度考虑这道题。 选择了若干条原树的边后,我们得到一些联通块。把这些联通块都缩在一起,假设剩下m个点,接下来我们要去连接这些联通块,得到一棵树,然后考虑这棵树的prufer序是怎样的。 由于当前叶子的父亲所表示的联通块原创 2018-03-01 20:32:05 · 803 阅读 · 0 评论 -
[agc013E]Placing Squares
题目大意给定一个n和m个数(升序给定,满足1≤s1 < s2 < … < sm < n) 你有无限个边长为正整数的正方形。你在数轴正半轴用正方形放在上面覆盖它。需满足:正方形恰好把0到n的区域覆盖完;不能翻转或叠置,且相邻两个正方形之间的缝隙坐标不能是m个数中任意一个。一个方案的贡献为所有正方形面积乘积。求贡献和模109+710^9+7n≤10910^9 m≤10510^5分析这题的思路在之前打原创 2018-02-22 18:30:56 · 558 阅读 · 0 评论 -
[agc016F] Games on DAG
题目大意给定一个n个点m条边DAG,每条有向边(x,y)满足x < y。现在有一个博弈:有两个棋子分别在节点1、2,两人轮流做以下操作:选择一个棋子,由其所在节点的出边移动到另一个节点。不能操作算输。假设两人绝顶,现在问有多少种边的子集满足:保留这些边之后先手必胜。方案数模109+710^9+7n≤15,没有重边分析可以考虑按照sg给图分层。 同时容易发现,两个棋子是两个独立的游戏,为了方便,只需原创 2018-02-15 12:00:48 · 772 阅读 · 1 评论 -
[codeforces827F] Dirty Arkady's Kitchen
题目大意给定n个点m条无向边,边权为1.每条边还有一个出现时间区间。从1出发,每个时刻必须沿着一条边走到另一个点。问你最早什么时候到达n。无解输出-1 n,m≤500000分析我们不妨把每个点拆成两个点,表示时刻为奇数和偶数。 边也按照奇偶拆开,再拆成两条有向边。 然后用小根堆以加入时间为关键字维护每条边。设Late[u][p]表示当前奇偶性为p的点u,最晚可以逗留到什么时候。加入一条边时,如原创 2018-01-10 16:56:36 · 460 阅读 · 0 评论 -
[codeforces848D] Shake It!
题目大意给定n,m,最开始一个无向图中只有两个点s,t和连接它们的一条边。你需要进行n次操作,每次选择图中一条边(u,v),加入一个点i,并且添加两条边(u,i),(i,v)。 问最终有多少种不同构的图,满足其s-t最小割为m。模10^9+7输出n,m≤50分析设f[i][j]表示i次操作,s-t最小割为j的方案数。 接下来你需要枚举五个数a,b,c,d,x(其中四元组(a,b原创 2018-01-09 22:21:04 · 661 阅读 · 0 评论 -
[codeforces856C]Eleventh Birthday
题目大意给定n个正整数,你需要把它们按任意顺序拼接,得到一个大数。问有多少种方案使得最终得到11的倍数。如果两个数相同,它们交换位置也算不同方案。答案对998244353取模n≤2000 数字≤10910^9分析找突破口。 我们发现,一个数的奇数位每加1,对模11的余数的贡献是1,偶数为每加1,贡献是-1。 证明?10≡−1(mod11)10≡-1(mod 11) 我们跟着这个思路走下去。对原创 2018-01-12 22:22:26 · 743 阅读 · 0 评论 -
[codeforces850D]Tournament Construction
题目大意给定m个数的一个非负整数集合,不超过30。你需要构造一个竞赛图,满足:所有点的出度去重后等于该集合。 m≤31分析做这题需要用到兰道定理(Landau’s Theorem)。 设点i的出度为d[i],那么对于任意1≤i≤n1≤i≤n,有∑ij=1d[i]≥i(i−1)2\sum_{j=1}^{i}d[i]≥\frac{i(i-1)}{2}。且当i=n时是等于。 那么可以考虑构造一个合法原创 2017-10-14 12:51:44 · 566 阅读 · 0 评论 -
[agc017F]Zigzag
题目大意有一个n行的三角形,第i行有i个格子。第i行第j个格子用(i,j)表示。从(i,j)可以到达(i+1,j)和(i+1,j+1)。现在要确定m条从(1,1)出发到第n行的路径。设第a条路径走到的第b个格子是(b,X[a,b]),对于任意a < b,不能存在i,使得X[a,i]>X[b,i]。同时还有K条形如(a,b,c)的限制,表示第a条路径第b个点到第b+1个点必须往方向c走。 求合法的方原创 2017-10-22 14:50:49 · 898 阅读 · 0 评论 -
[codeforces856D]Masha and Cactus
题目大意给定n个点的树,接下来给出m条非树边,每条非树边有一个价值。现在你可以添加一些非树边,在保证每个点最多在一个简单环的情况下,求价值和最大值。n,m≤200000分析首先考虑dp,设f[i]表示以i为根的子树的答案。 把每条非树边挂在lca上。求f[i]时,首先处理不选择一条lca为i的情况。接下来枚举一条lca=i的非树边,加上其它儿子的f值、该边所覆盖的路径的答案。 难点就在于求一条路原创 2017-09-16 09:15:43 · 741 阅读 · 0 评论 -
[bzoj5043]密码破译
题目大意有一个n个数的数组a和一个非负整数k(a[],k未知),但是你知道数组b,对于任意i满足bi=ai^k。你还知道∑ai=m\sum ai=m求可能最小的k,无解输出-1 n≤100000,bi≤2602^{60}分析其实这种题都是套路题。 首先可以预处理cnt[i]表示b数组有几个数二进制第i位为1,p[i]表示m的二进制第i位是否为1。然后从高到低逐位确定k。设f[i][j]表示确定到原创 2017-09-23 22:01:06 · 1262 阅读 · 0 评论 -
[51nod1597] 有限背包计数问题
题目大意你有一个大小为n的背包,你有n种物品,第i种物品的大小为i,且有i个,求装满这个背包的方案数有多少 两种方案不同当且仅当存在至少一个数i满足第i种物品使用的数量不同n≤100000,答案模23333333,时限2.333s分析这道题一看是一道多重背包,但是范围有点大啊。。。 可以尝试利用一下题目的条件,对于i≤n√i≤\sqrt{n},就做一次多重背包。合并一种物品时,通过前缀和可以优化原创 2017-03-29 20:46:01 · 1189 阅读 · 0 评论 -
[bzoj4446][Scoi2015]小凸玩密室
题目描述小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯 泡即可逃出密室。每个灯泡有个权值Ai,每条边也有个权值bi。点亮第1个灯泡不需要花费,之后每点亮4 个新的灯泡V的花费,等于上一个被点亮的灯泡U到这个点V的距离Du,v,乘以这个点的权值Av。在点灯 的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才原创 2017-03-21 12:27:28 · 873 阅读 · 0 评论 -
[bzoj4583]购物/SRM601 WinterAndShopping
题目描述商店出售3种颜色的球,分别为红、绿、蓝。城市里有n个商店,第i个商店在第First_i天开始营业,连续营业Red_i+Green_i+Blue_i天,每个商店每天只能出售一种颜色的球。每天最多有两个商店同时营业。如果同一天内有两个商店同时营业,那么这两个商店必须出售相同颜色的球。求不同的出售方案数(对1,000,000,007取模)。两种方案不同,当且仅当某一天某一个商店出售的球的颜色不同。原创 2017-03-17 20:33:44 · 560 阅读 · 0 评论 -
【GDOI2017模拟10.30】分组
题目大意给定n个数和一个k,要给这n个数分成若干组,满足∑\sum每组元素的极差不大于k。求方案数模109+710^9+7的值。数据范围n≤200 k≤1000 si≤500分析对于一个组,我们只关心它的最大、最小值。可以先给n个数降序排序,设f[i][j][k]表示前i大的数,现在有j组还没确定最小值(此时最小值视为0),极差和为k,列出DP方程: f[i][j][k]=f[i−1][j]原创 2016-10-31 16:54:32 · 454 阅读 · 0 评论 -
[codeforces722E] Research Rover
题目大意有一个n*m的网格图,你要从(1,1)走到(n,m),每一步可以向右(或向下)走。你最开始有s点能量,然而有k个障碍点,每到达一个障碍点,你的能量会变成⌈x2⌉\lceil \frac{x}{2} \rceil。问走到(n,m)时你最终能量的期望。假设它是PQ\frac{P}{Q},输出P∗Q−1P*Q^{-1}模109+710^9+7的逆元。数据范围n,m≤100000 k≤2000原创 2016-10-27 17:22:47 · 811 阅读 · 0 评论 -
[GDOI2017模拟9.4]同桌的你
DescriptionInputOutputData Constraint分析对每个环套树分别求答案。 考虑一棵树上怎样求答案:设f[i][0/1]表示以i为根的子树,其中1表示i与它的某个儿子配对(0表示没有),最优解是多少。这是一个O(n)的dp。 现在考虑上环,如果暴力地把每条边分别删去,然后求答案,是很慢的。 但是注意到,匹配是对于相邻的两个点的,也就是说选取了一条边后,相邻的边都不能原创 2016-09-04 13:06:42 · 481 阅读 · 0 评论 -
[codeforces232E]Quick Tortoise
题目大意给定一张n*m的地图,每个位置(i,j)可能是空地和障碍物。有q个询问,每次询问给出四个数x1,y1,x2,y2,问从(x1,y1)是否能走到(x2,y2)(只能向右或向下走到空地,保证两个位置都是空地)数据范围1≤n,m≤500 1≤q≤600,000分析点比较多,无法储存每对点之间的连通性,而且似乎用图论的知识难以下手。 考虑离线去做。 假如现在确定了一个数y,然后处理所有跨过第y原创 2016-09-03 21:48:08 · 473 阅读 · 0 评论 -
String
Description有两种字符串S,T。长度分别为n,m。现在需要在S里面有序地选出k个子串,且在T中出现的顺序与这k个子串的顺序相同。问这k个子串最大的长度和Input第一行三个数n,m,k 第二行长度为n的S串 第三行长度为m的T串Output一个数表示答案Sample Input9 12 4 bbaaababb abbbabbaaabaSample Output7Data Const原创 2016-07-08 18:30:52 · 317 阅读 · 0 评论 -
[51nod 1197] 字符串的数量 V2
Description用N个不同的字符(编号1 - N),组成一个字符串,有如下要求: (1) 对于编号为i的字符,如果2 * i > n,则该字符可以作为结尾字符。如果不作为结尾字符而是中间的字符,则该字符后面可以接任意字符。 (2) 对于编号为i的字符,如果2 * i <= n,则该字符不可以作为结尾字符。作为中间字符,那么后面接的字符编号一定要 >= 2 * i。 问有多少长度为M且符合原创 2016-07-03 21:16:02 · 714 阅读 · 0 评论 -
[bzoj4007]【JLOI2015】战争调度(war)
Description脸哥最近来到了一个神奇的王国,王国里的公民每个公民有两个下属或者没有下属,这种 关系刚好组成一个 n 层的完全二叉树。公民 i 的下属是2* i 和2* i+1。最下层的公民即叶子 节点的公民是平民,平民没有下属,最上层的是国王,中间是各级贵族。现在这个王国爆发了 战争,国王需要决定每一个平民是去种地以供应粮食还是参加战争,每一个贵族(包括国王自 己)是去管理后勤还是领原创 2016-06-30 10:54:58 · 1212 阅读 · 0 评论 -
[Codeforces37D]Lesson Timetable
题目大意有m个教室,第i个教室最多能容纳Yi组人,初始时第i个教室有Xi组人。 现在每组人要从当前所在的教室a移动到教室b(a≤b)。我们不知道第i组人初始在哪间教室,以及它要去哪间教室,求可能的方案数。答案对109+710^9+7取模数据范围1≤m≤100 0<∑Xi \sum{Xi}≤1000 0≤Xi,Yi≤100思路设s[i]=∑ij=1xj\sum_{j=1}^i xj 先原创 2016-06-28 14:43:49 · 823 阅读 · 0 评论 -
【JSOI2016】最佳团队
DescriptionInputOutputSample Input1 2 1000 1 0 1 1000 1Sample Output0.001Data Constraint分析这种最大化形如∑x/∑y \sum x / \sum y 的式子的题,很容易想到分数规划。 二分答案,对于当前的mid,设d[i]=p[i]-mid*s[i] 考虑到当一个节点i被选,那么fa[i]也要被选,那么原创 2016-06-02 12:49:33 · 984 阅读 · 0 评论 -
【GDOI2016Day1】第二题 最长公共子串
DescriptionInputOutputSample InputSample OutputData Constraint分析如果两个操作区间有交集,那么可以把它们合并。(容易证明) n,m较小,可以设f[i][j] 表示从S和T的第i、j个位置开始最多能匹配多少位。直接计算会超时,因此考虑dp对于S的一个位i,用l[i],r[i]表示它所在的操作区间的两个边界(如果它不被包含,则视作它被[i.原创 2016-05-16 19:53:57 · 650 阅读 · 0 评论 -
【NOIP2016提高A组集训第13场11.11】最大匹配
题目大意给你一棵n个节点的树,让你把它变成二分图,然后求最大匹配和最大匹配的方案数模109+710^9+7的值。 n≤100000转化成二分图如何把一棵树转化成二分图。 因为二分图中,处于同一集合的点两两之间没有边,所以可以这样:任取一点为根,然后根据深度的奇偶性分为两个集合。显然正确。DP设f[i][0/1]表示以i为根的子树的最大匹配。其中f[i][0]表示i不与儿子连边,f[i][1]表示原创 2016-11-12 19:52:00 · 393 阅读 · 0 评论 -
[51nod1301]集合异或和
题目大意已知两个整数N与M,你需要构造两个整数集合X与Y,且需要满足以下要求: (1)对所有的xi∈X,满足1<=xi<=N;对所有的yj∈Y,满足1<=yj<=M; (X与Y可以为空集) (2)X∩Y=Φ;(但不要求集合X与Y的元素个数,只要两者没有交集即可) 不妨设构造后的集合X含有n个元素,而集合Y有m个元素,令 A=x1 xor x2 xor x3 xor … xor xn, B=y原创 2016-12-02 20:03:44 · 1433 阅读 · 1 评论 -
[codeforces585F/51nod1587]Digits of Number Pi
题目大意有一个字符串S。给定两个数x,y保证x,y都是d位数且没有前导0,求[x,y]中有多少个数满足:S中存在一个长度为⌊d2⌋\lfloor \frac{d}{2} \rfloor的子串,它也存在于这个数中。|S|≤1000 d≤50 答案对109+710^9+7取模。分析首先答案可以等于[1,x-1]的答案减[1,y]的答案。 观察数据范围,|S|≤1000,d≤50,那么S所有长原创 2016-12-12 20:59:54 · 524 阅读 · 0 评论 -
[51nod1411] 矩阵取数问题 V3
题目大意给定一个m行n列的矩阵,你可以从任意位置开始取数,到达任意位置都可以结束,每次可以走到的数是当前这个数上下左右的邻居之一,唯一的限制是每个位置只能经过一次,也就是说你的路径不自交。所经过的数的总作为你的得分,求最大的得分。n,m≤10 整数范围[-10000000,10000000]分析求一条路径、上下左右走的矩阵,很容易想到插头DP。 设f[i][j][S]表示决策到(i,j),插头状原创 2017-02-23 22:45:00 · 905 阅读 · 1 评论