
dp
文章平均质量分 67
Fuko_Ibuki
Eclipse first, the rest nowhere. 已从ACM领域退出,这个账号不会再发题解了。
展开
-
Codeforces 1667B Optimal Partition 数据结构维护dp
文章目录题意题解很有味道的一场比赛,BC两个题的想法都非常精彩。题目链接题意定义一个区间的贡献f(x)f(x)f(x)为该区间的长度乘上该区间所有数之和的符号。问将一个序列分成若干区间的贡献之和的最大值。题解首先可以写出显然的n2n^2n2动态规划做法。dpi=maxj=0i−1dpj+f(j+1,i)dp_i=max_{j=0}^{i-1}dp_j+f(j+1,i)dpi=maxj=0i−1dpj+f(j+1,i)分析区间贡献的性质,发现最优解中若f(x)f(x)f(x)的贡献为负,原创 2022-04-23 00:26:57 · 379 阅读 · 0 评论 -
Codeforces 1614D Divan and Kostomuksha 调和级数dp,枚举因数优化
文章目录题意题解题意给出一个序列,重排这个序列,使得∑i=1ngcd(a1,a2,a3,...,ai)\sum_{i=1}^{n}gcd(a_1,a_2,a_3,...,a_i)i=1∑ngcd(a1,a2,a3,...,ai)最大,输出这个最大值.题解数据范围可以使用cntcntcnt数组,故考虑调和级数算法.cntcntcnt数组存储每一个数作为约数在多少个数中出现过.则再处理dpdpdp数组表示对于gcd至少为iii的情况下的最大和.转移方程为dp[y]=max(dp[y],原创 2021-11-29 12:55:20 · 2236 阅读 · 2 评论 -
Codeforces 1558B & 1561D2 Up the Strip 化因数为倍数优化dp
文章目录题意题解题意有nnn个格子,一开始有个棋子在编号为nnn的格子上,要把它移动到编号为111的格子.你有两种操作:当前位置编号为xxx,选择一个y∈[1,n−1]y\in [1,n-1]y∈[1,n−1],则可以变为x−yx-yx−y.当前位置编号为xxx,选择一个z∈[2,n]z\in[2,n]z∈[2,n],可以变为[xz][\frac{x}{z}][zx].只要具体操作不同就是两种不同的方法,问有多少种不同方法可以把棋子从nnn移动到111,取模一个大质数.题解这题一来显然考原创 2021-08-26 12:42:22 · 1073 阅读 · 0 评论 -
Codeforces 981D Bookshelves & 981E Addition on Segments 两道皆是dp
文章目录981D Bookshelves题意题解981E Addition on Segments题意题解题目链接就不放了.981D Bookshelves题意长度为nnn的序列,从左到右分为kkk段,每段求和后计算二进制与,问计算出的最大值.n≤50,ai≤250n\leq 50,a_i\leq 2^{50}n≤50,ai≤250.题解考虑dpdpdp.不太好直接dpdpdp,但是由于二进制数最高位起决定作用的性质,我们考虑按位dpdpdp,从最高位向下枚举,每次判断nnn个数是否可以分原创 2021-08-09 23:22:31 · 216 阅读 · 0 评论 -
Atcoder dp_u Grouping 状压dp
文章目录题意题解题目链接题意把nnn只兔子分组,每两只兔子之间有一个亲密度,当然亲密度也有可能是负数,表示这两只兔子有仇.一个组的亲密度是这一组里所有兔子两两的亲密度之和,问合理分组下最大的总亲密度.n≤16n\leq16n≤16.题解状压dpdpdp,枚举集合,dpSdp_SdpS表示集合SSS表示的兔子们合理分组的最大总亲密度.则从小到大枚举集合,假设SSS的兔子全部被分在一组里,得到SSS的初始值.然后枚举SSS的真子集iii,用dpS⊕i+dpidp_{S \oplus i}+d原创 2021-08-04 13:05:19 · 523 阅读 · 0 评论 -
Atcoder dp_q Flowers 数据结构优化dp
文章目录题意题解最近在练习atcoder上的dp场,大概只会做一半.我选出一些不会的题目写一下博客.题意按顺序每朵花有一个高度,一个美丽度,选出一个高度上升的子序列,求美丽度之和的最大值.题解令dpidp_idpi表示以第iii朵花结尾的子序列的美丽度的最大值.则转移就是找到iii之前比第iii朵花矮的位置dpdpdp的最大值,然后加上第iii朵花的美丽度.直接找的话显然是n2n^2n2的,显然用线段树或者树状数组等数据结构进行维护就可以变成n×log(n)n\times log(n)n×l原创 2021-07-22 10:40:59 · 7391 阅读 · 0 评论 -
Atcoder dp_m Candies 前缀和优化dp
文章目录题意题解题意给nnn个孩子发kkk颗糖,每个孩子最多拿到aia_iai颗,问有多少种分法.n≤100,k≤105n\leq 100,k\leq 10^5n≤100,k≤105.题解考虑dp.dp.dp.非常裸的dpdpdp如下.for (int i=1;i<=n;++i) { for (int j=k;~j;--j) for (int l=j+1;l<=j+a[i];++l) dp[l]=(dp[l]+dp[j])%mod;}复杂度为O(n原创 2021-07-19 01:04:42 · 7991 阅读 · 0 评论 -
Codeforces 1509C The Sports Festival 区间dp & Codeforces 1509D Binary Literature 抽屉原理,构造
文章目录C题意题解D题意题解C题意给一个序列,令di=max(a1...ai)−min(a1...ai),求min∑i=1ndi给一个序列,令d_i=\max(a_1...a_i)-\min(a_1...a_i),求\min \sum_{i=1}^n{} d_i给一个序列,令di=max(a1...ai)−min(a1...ai),求min∑i=1ndi.题解区间dp.先把序列排序,观察发现最终答案的尾部必定是最大值或者最小值,从而整个序列的前iii个数必然是从小到大的一个区原创 2021-04-17 13:37:43 · 11277 阅读 · 0 评论 -
Codeforces 478D Red-Green Towers 背包
文章目录题意题解啥dpdpdp都能变成背包就离谱.题意给出红绿色块的个数,用这些方块搭成金字塔形,每一层的颜色必须都相同,求能搭成不同最大金字塔的种数.题解设两种色块的个数分别为n,mn,mn,m,由于n,mn,mn,m复杂度同级,下全作nnn.令dpi,jdp_{i,j}dpi,j表示iii层金字塔用上红色块个数为jjj的方案总数,绿色块的个数可以直接计算.则dpi,j=dpi−1,j−i(这一层用红色块)+dpi−1,j(这一层用绿色块)dp_{i,j}=dp_{i-1,j-i}(这一层原创 2021-02-26 12:16:28 · 10310 阅读 · 0 评论 -
Codeforces 1183E/H Subsequences dp
文章目录题意题解div.3真是优秀dp层出的场次.题意给一个字符串,令一个子序列的价值为原字符串变成该子序列去掉字母的个数,求选择kkk个各不相同的子序列所得价值的最小值.不能选择kkk个各不相同的子序列则输出−1-1−1.题解显然从贪心考虑我们应当尽量选择较长的子序列.这给我们一个dpdpdp思路即为对每一个i∈[1,n]i\in[1,n]i∈[1,n]求得长度为iii各不相同子序列的个数.令dpi,jdp_{i,j}dpi,j表示前iii个字母中长度为jjj的各不相同的子序列个数.倘若字原创 2021-02-19 20:28:33 · 11935 阅读 · 0 评论 -
Codeforces 623B Array GCD 数论,dp
文章目录题意题解题意一个序列每个数都大于111,要使整个数列的最大公约数大于111,可以最多删除一个子串,每一个数花费aaa元,也可以给一个数增添111或者减少111,每个数最多操作一次.求达成目标最少需要花费的钱数.题解当整个数列的gcdgcdgcd确定了的时候,可以用dpdpdp求出最少需要的钱数.用dp[0][i]表示前iii个数中没有被删除的数时的最低需求.dp[1][i]表示第iii个数被删除时的最低需求.dp[2][i]表示第iii个数未被删除并且前面已经有数被删除时的最低需求.原创 2021-01-31 21:07:50 · 11675 阅读 · 0 评论 -
Codeforces 1458B/1459D Glass Half Spilled 背包
文章目录题意题解问了博哥得知这是一道背包非常震惊.然而还是不会做,看题解研究了两个小时.题意有很多杯子,每个杯子有容量aaa以及当前装的水bbb.每次可以将一个杯子里的水倒入另一个杯子,但是有50%50\%50%的损耗,并且杯子里的水不能超过其容量,否则也将损耗.询问将水全部存储至kkk个杯子里面的时候能够存储的最大水量,输出kkk从111取到nnn时的答案,每个询问相互独立.题解用dp[i][j][k]dp[i][j][k]dp[i][j][k]表示前iii个杯子中取jjj个并且能够存储的总水量原创 2020-12-26 00:29:49 · 11639 阅读 · 0 评论 -
arc107_d Number of Multisets dp
文章目录题意dp状态寻求10月31日晚arc107真题先吐槽这一场的前四题竟然都是计数题,让我非常震惊.这是一道十分精巧的dp,对提高自身的dp实力有比较大的帮助,本人强烈推荐.题意求含有nnn个数,和为kkk,每个数都形如12i(i∈N)\frac{1}{2^i} (i\in N)2i1(i∈N)的集合数量取模998244353998244353998244353.1≤k≤n≤30001\leq k\leq n\leq 30001≤k≤n≤3000.dp状态寻求符合条件的集合可以分为两种原创 2020-11-01 13:24:56 · 11822 阅读 · 1 评论 -
Codeforces 1110D Jongmah dp
文章目录题意题解链接题意一种麻将的牌从1→m1 \to m1→m,给你一手牌,nnn张,求这手牌最多能组成面子的数量.题解标准dp,所以写一下博客.可以发现同样三个数字组成的顺子不会超过三组(可以当作三个刻子处理),因此可以定义dp[i][j][k]dp[i][j][k]dp[i][j][k]表示前iii种牌,i−1,i,i+1i-1,i,i+1i−1,i,i+1组成的顺子数量为jjj,i,i+1,i+2i,i+1,i+2i,i+1,i+2组成的顺子数量为kkk的最多面子数量.转移的时候枚举l原创 2020-10-02 23:38:09 · 10359 阅读 · 2 评论 -
Codeforces 1043F Make It One 经典调和级数算法,组合数,dp
题意给你n个数,取出一些数使这些数的最大公约数为1,求取出数字的最少个数,不能输出−1.给你n个数,取出一些数使这些数的最大公约数为1,求取出数字的最少个数,不能输出-1.给你n个数,取出一些数使这些数的最大公约数为1,求取出数字的最少个数,不能输出−1.数据范围两个3×1053\times 10^53×105.秒杀可以看到当几个质数分别为a,b,c,d,e,f......a,b,c,d,e,f......a,b,c,d,e,f......时,abcde,abcdf,abcef,abdef,acde原创 2020-08-18 21:31:31 · 10632 阅读 · 0 评论 -
回文串分割:经典dp
题目做法好题啊.题目lightoj 1044 Palindrome Partitioning 给出一个字符串,求最少把它分成多少个回文串.做法要求的时间复杂度是O(n2)O(n2)O(n^2)或者O(n3)O(n3)O(n^3). 我们先来看一下O(n3)O(n3)O(n^3)的./*考虑dp.dp[i]表示到第i个字符为止至少分成多...原创 2018-07-08 18:40:06 · 14504 阅读 · 0 评论 -
是dp还是贪心?邓哲也的矩阵(优先队列)
题目如下:思考.题目如下:给你个n行m列的矩阵,你可以操作k次,每次把一行或者一列每个数都减p,然后获得这一行或者这一列原来所有数的和的分数. 问k次操作后能够得到的最大分数.思考.首先想到一个贪心,每次选择最大的一行或者一列进行操作. 可惜样例里有一个数据是这样的.n=1 m=2 k=3 p=23 3这时候这种贪心算出来只有7...原创 2018-07-10 11:15:00 · 12435 阅读 · 0 评论 -
从一维到二维:最大子段和和最大子矩阵和
首先我们看这道题.接下来再看这道题.终于回到了过往,我们将重新走上dpdpdp这条路.首先我们看这道题.给出一串数列,求最大的子段和. 我们举个栗子.71 2 3 -5 4 3 -6这个样例的答案是8,前6个数相加是最大的. 显然本题是一个dp了. 定义dp[i]为以第i个数结尾的最大子段和,最后把dp[1 to n]全部处理一遍取其中的最...原创 2018-07-07 16:27:16 · 12920 阅读 · 0 评论 -
洛谷 P4149 [IOI2011]Race 点分治+dp
洛谷 P4149 [IOI2011]Race求一棵树上路径长度刚好等于k的两点间的最小边数.如果不存在输出-1. 点分治不一定要容斥!!!!重要的事情要说三遍! 显然这题是点分治. 我们考虑dpdpdp搞,用sumsumsum数组处理路径长度为disdisdis的两点间的最小边数,如果不存在为infinfinf. 每一次solvesolvesolve某个点之后暴力把没有处理过的点的su...原创 2018-08-06 21:11:44 · 11962 阅读 · 0 评论 -
Codeforces 814E An unavoidable detour for home 高妙动态规划
题意不愧是神场,据传Div.2E做出了TC Div.1 1000的赶脚,而这题做到了.题意问有多少张符合下列条件的无向图: 1.每个点的度都是固定的,为2或者3. 2.每一个点到1号点的最短路有且只有一条. 3.令i为1->n-1中的任意一个点,必须满足i到1的最短路小于或者等于i+1到1的最短路. 你在路上如果真的能够遇到八九寺真宵,那你可能也是个怪人...原创 2018-09-05 08:25:02 · 18490 阅读 · 2 评论 -
Codeforces 1051D Bicolorings 简单状压dp
文章目录题意题解题意给一个2*n的网格涂黑白两色,求涂出k个连通块的方法总数膜998244353.题解可以作为状压dp的入门题.由于连通块构成需要相邻,只有上一列的两个格子的颜色对这一列构成连通块的个数有影响.两个格子的颜色的情况只有4种可能,可以状压这两个格子的涂色方法.用dp[i][j][k]表示当前涂到iii列,有jjj个连通块,上一列的状态是kkk的时候的方案总数.利用当前...原创 2018-09-26 13:40:54 · 17403 阅读 · 1 评论 -
Hdu 3555 Bomb 数位dp
文章目录题目链接题意题解题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3555题意求1 to n有多少个含有49的数.题解我好像一年前就A了此题,不过貌似还是不怎么懂.令dp[i][0]dp[i][0]dp[i][0]表示iii位数中不含有连续494949的数字个数.dp[i][1]dp[i][1]dp[i][1]表示iii位数中不含有...原创 2018-09-27 08:47:37 · 12822 阅读 · 0 评论 -
Codeforces 期望概率dp 235B,351B,768D,50D,101D 题解
文章目录235B Let's Play Osu!351B Jeff and Furik768D Jon and Orbs50D Bombing101D Castle5道不错的概率dp.235B Let’s Play Osu!你打音游的得分是你每次击中连续音符个数的平方和.给出你击中每一个音符的概率,求你的期望得分.你打音游的得分是你每次击中连续音符个数的平方和.\newline给出你击中每...原创 2018-11-06 21:52:15 · 11150 阅读 · 0 评论 -
Codeforces 字符串五题题解 509E,245H,514C,724D,835D
文章目录509E245H514C724D835D509E求一个字符串每一个子串中元音字符占比的和.求一个字符串每一个子串中元音字符占比的和.求一个字符串每一个子串中元音字符占比的和.稍微推式子,可以发现如果在长度为nnn的字符串中的第iii个字符是元音字符,它所产生的贡献是:1i+1i+1+1i+2+...+1n+1i−1+1i+1i+1+...+1i−2+......+11+12+......原创 2018-11-02 14:25:58 · 13744 阅读 · 0 评论 -
Codeforces 825F String Compression 字符串,dp
文章目录题意题解这可能将是我oi生涯切的最后一道题了.oi,有缘再见.题意可以将一个字符串中连续重复的字符串压成出现次数加该字符串的形式,比如说abababab压成4ab,aaaaaaaaaa压成10a,求给定字符串最短压缩的长度.可以将一个字符串中连续重复的字符串压成出现次数加该字符串的形式,比如说\newlineabababab压成4ab,aaaaaaaaaa压成10a,求给定字符串...原创 2018-11-08 22:11:14 · 13797 阅读 · 0 评论 -
Codeforces上几个非常妙的数据结构题
第一次做线段树优化dp.没想到div.2的D这么难,以后真的要退竞了.题意将一串数字分为k个连续区间,使得每一段中出现数字种数的总和最大.做法我们先来思考一下裸的dp. 定义dp[i][j]为前i−1i−1i-1个数分割为jjj份的最大值. 因此有代码dp[i][j]=max(dp[k=1 to i][j-1])+sum(k,n);/*此处的sum(k,n)是k ...原创 2018-05-08 08:29:49 · 12912 阅读 · 3 评论