![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
文章平均质量分 65
林苏泽
很多时候终点看着很远,实际也很远,但只要你不向它跑去,他永远都很远,所以只有你向它跑去,才能更接近它,所以加油,向前奔跑吧,即使最后没有到达所想的终点,但我想也不会差。起码我们已经比别人距终点近了好多。
展开
-
CF1422C Bargain (DP+思维+数学)
链接题意:给定整数 n(1≤len(n)<105n(1 \leq len(n) < 10^5n(1≤len(n)<105 ,其中 len(n)len(n)len(n)表示 nnn 的位数)) ,现在规定每一轮Vova可以从中取出一段连续的几位数字,剩余数字即为该轮得分.结果可以拥有前导 000 .特别的,如果Vova取出了所有数字,那么该轮得分为 000 .现在请你求出所有不同取法得分之和对 109+710^9+7109+7取模后的值.特别的,如果有多种不同取法得到了同样的数字,得原创 2021-11-15 09:35:46 · 201 阅读 · 0 评论 -
Codeforces Round #746 (Div. 2) E. Bored Bakry(math+dp)
链接题意:给定一个 n 个数的数组,要求找一个连续子区间,满足该子区间的区间且大于区间异或和。求该子区间的最大长度。分析:首先分析:当长度为奇数时会发生怎样的状况:如果首位是全1那么区间且在改为上是1,区间异或和也是1,如果不是全1那么区间且一定是0,而区间异或和可能是1也可能是0.所以我们得出长度一定是偶数,然后我们分析,只有全是1的时候区间且才比区间异或优,这时区间且是1,区间异或和是0.当我们从最高位分析时,我们判断到i位需要知道前一位是不是两个相等的情况,如果属于相等的情况我们才能往后看原创 2021-11-11 20:34:48 · 247 阅读 · 0 评论 -
Codeforces Round #750 (Div. 2)E. Pchelyonok and Segments (数学+DP)
链接君子,修身齐家,治国平天下。题意:Pchelyonok决定给Mila一件礼物。Pchelyonok已经“买”了一个长度为 n 的数组 a,但他觉得送一个数组太普通了。他决定将这个数组中的一些区间送给Mila!Pchelyonok想让他的礼物更漂亮,因此他决定从数组选择 k 个不相交的区间,满足:第一个区间的长度是 k,第二个区间的长度是 k-1,…,第 k 个区间的长度是 1。对任意i<ji \lt ji<j,第 iii 个区间在第 jjj 个区间左边。(即 ri<lj)r原创 2021-11-11 19:07:14 · 346 阅读 · 0 评论 -
2021CCPC女生赛 C. 连锁商店(思维+状压DP)
链接题意:给出N个节点,给出M条边,我们只能从低节点跳到高节点。然后给出N个节点属于的公司,给出第i个公司第一次到给多少奖金。问从节点1开始,分别到达节点(1~n)最大奖金。分析:其实不难想到我们如果当前节点在x,有(a1,a2,a3…)这些节点可以到达节点x,那么我们选取(a1,a2,a3…)所有的状态转移过来就好了,状态表示我们可以用二进制,也可以用字符串数组等等,只要可以表示状态就行。状态转移有两种状态一种是在之前出现过,不用再加奖金了,把这个状态加入x另一种之前没有出现过,加上奖金并原创 2021-11-01 17:13:30 · 1329 阅读 · 0 评论 -
ARC 123 D - Inc, Dec - Decomposition (思维构造+DP)
链接题意:给出A序列,让你构造出B,C序列要求满足:Bi+Ci=AiB_i+C_i=A_iBi+Ci=AiB序列递增C序列递减使得∑∣Bi∣+∣Ci∣\sum |B_i|+|C_i|∑∣Bi∣+∣Ci∣最小化分析:我们要让B递增,C递减,∑\sum∑那么我们肯定要 满足Bi=Bi+1B_i=B_{i+1}Bi=Bi+1或者Ci=Ci+1C_i=C_{i+1}Ci=Ci+1所以一旦我们选择好B1B_1B1也就确定了整个序列。我们看B,C是相反的单调性,不好分析,我们原创 2021-10-29 12:10:31 · 312 阅读 · 0 评论 -
Gym 102394 I. Interesting Permutation(DP)
链接题意:给你一个数字n,然后有一个长度为n的数列,这个数列的第 i 项值时某个数列的前 i 项的最大值减去最小值的到的结果,问你用着n个数字能构造出来多少种长度为n的数列。分析:首先我们考虑一下一定没有答案的方案:如果开头不是0,或者结尾不是n-1一定没有答案如果整个序列不是单调递增一定没有答案如果差值小于序列长度-1,一定没有答案(长度为x,差值最小这x个数分别是1,2…x,这样差值为x-1所以差值不会小于序列长度-1)然后我们分析:我们刚拿到这个问题,不知道如何解决,那么我们得找到原创 2021-10-21 09:38:34 · 153 阅读 · 0 评论 -
ARC 128D - Neq Neq(dp+组合数学+思维)
链接题意:给出你一个长度为n的序列,你可以对其操作使得这个序列发生变化,问一共有多少种?对于连续的i-1,i,i+1,这三个数如果满足 ai−1!=aia_{i-1}!=a_{i}ai−1!=ai并且ai!=ai+1a_{i}!=a_{i+1}ai!=ai+1 那么我们就可以将aia_iai删掉。分析:明显看出利用DP来解决组合数学问题。那么我们认为第iii位置,表示到i有dp[i]种方案数。那么他会从那种状态转移过来那?首先dp[i]是继承dp[i-1],这一点是一定的,其次原创 2021-10-18 19:42:35 · 292 阅读 · 2 评论 -
ARC 128 C - Max Dot (DP+思维)
链接题意:给出你n,m,s, 和n个数a[i],让你构造出一个长度为n的一个序列p,使得∑pi∗ai\sum p_i*a_i∑pi∗ai最大,并且要满足一下条件0<=p1<=p2<=....<=pn<=m0<=p_1<=p_2<=....<=p_n<=m0<=p1<=p2<=....<=pn<=m(∑pi)=s(\sum p_i)=s(∑pi)=s分析:首先我们采用三段分割,至于为什么要三段原创 2021-10-18 15:44:13 · 341 阅读 · 0 评论 -
E . Tutorial Groupings (DP + 思维)
题意:给出你NNN个数,然后让你分组,每组中最多有sss个元素,并且要求整个序列严格递增,也就是TiT_iTi组最大的元素严格小于Ti+1T_{i+1}Ti+1中最小的元素。并且一个组中极差最大为kkk.问方案数?对1e9+7取模。分析:首先我们看数据范围 n为100001000010000 ,s为100100100,那么我们可以用dp[i][j]dp[i][j]dp[i][j]表示第i个位置,以长度为j为一组结束的方案数。两种情况 :j=1j=1j=1.那么我们可以想到dp[i][1]原创 2021-09-27 19:54:13 · 85 阅读 · 0 评论 -
F . Final Standings (概率DP)
链接题意:t 组队伍, p 道题目,自己是第 t 只队伍;接着给出前 t - 1 只队伍的能力值,再给出 p 道题目的难度值;( 每只队伍做出这道题的概率 = 这只队伍的能力值 * 这道题的难度;)接下来给出每只队伍的每道题目的做题情况" X " 代表明确知道做出来了, “ - ” 代表明确知道没做出来, “ ? ” 表示不知道做没做出来;(最后一行,也就是自己的队伍不会出现 " ? " );问自己队伍最后获胜的概率是多大;(自己队伍永远是做的最快的,也就是全场自己队伍出题数应该是最高的或原创 2021-09-13 09:25:50 · 115 阅读 · 0 评论 -
Nordic Collegiate Programming Contest 2020 Damsindistress (dfs+思路)
链接题意:给定每个大坝先有水量以及总容量,超过总容量时就会流向下一级(靠近根)的大坝。问最少需要多少新的水可以使整个大坝体系的根崩溃?只往一个里面加水分析:首先我们知道要冲垮最后一个大坝也就是sum,然后我们用m表示所需的最小水量。我们用a[i]表示大坝容量,用b[i]表示大坝当前的水。所以我们现在可以这样考虑状态:a[i]>sum,那么我们直接可以用a[i]-b[i]来代替sum和m,即a[i]-b[i]代替了最后一个大坝a[i]<=sum,那么我们可以直接将其 b[i原创 2021-09-11 16:01:13 · 166 阅读 · 2 评论 -
ABC 217 F - Make Pair (区间DP)
链接题意:一共有2∗n2*n2∗n个数,然后有m对好朋友,让你对其消消乐,使得他们好朋友好朋友之间配对,都能找到伴,问有多少中消法?分析:一共两种情况:两位朋友在两端,那么dp[i][j]=dp[i+1][j-1];一个朋友在一端®,另一个朋友在中间(l)。dp[i][r]=dp[i][j]×dp[l][r]×C(r−i+1)/2i/2dp[i][r]=dp[i][j]\times dp[l][r] \times C_{(r-i+1)/2}^{i/2}dp[i][r]=dp[i][j]×dp[原创 2021-09-06 20:27:32 · 243 阅读 · 0 评论 -
ABC 216 F - Max Sum Counting(DP+数学+思维)
链接题意:给出你长度为nnn的两个序列aaa和bbb,从中找出子集S{1,2,3,4,...n}S\{1,2,3,4,...n\}S{1,2,3,4,...n}从中找子集然后要求maxi∈Sai>=∑i∈Sbimax_{i∈S}a_i>=\sum_{i∈S}b_imaxi∈Sai>=∑i∈Sbi对方案数取模与998244353998244353998244353分析:首先我们看数据范围是5000说明我们可以O(N2)O(N^2)O(N2)然后我们贪心的想先看AiA原创 2021-08-30 00:12:39 · 210 阅读 · 1 评论 -
CF 1562 E. Rescue Niwen! (字符串+DP+后缀数组优化)
E. Rescue Niwen!题意:给定一个字符串 sss,将 sss 的所有子串按照它在 sss 中的出现位置 l,rl,rl,r排成一列,其中 lll 为第一关键字 rrr 为第二关键字。求这个字符串序列的最长上升子序列,其中大于的定义是字典序大于。分析:首先我们从题意中看,他要找最长上升的子序列,那么首先我们需要知道,第xxx位置开头的子序列集合我们用S(x)S(x)S(x)表示,那么如果我们取了第xxx位置开的的子序列那么我们取的最长上升子序列,一定是在S(x)S(x)S(x)中连续的。原创 2021-08-29 19:16:04 · 226 阅读 · 0 评论 -
ARC 125 D - Unique Subsequence (树状数组+DP+字符串)
链接题意:给定长度为nnn的序列aaa,问有多少aaa的子序列bbb,满足在aaa的子序列中只出现一次。分析:首先我们看到,子序列,那么我们想到如何使他唯一,我们发现,如果 我们找到以x结尾的子序列,在后面还有x那么一定不是唯一的, 举个例子1 2 11 3 4 5 6 3 4 我们以3结尾,1 2 11 3 在其后第8个位置还有一个3所以还可以1 2 11 3(8).这样就不符合条件。那么我们只能考虑同样数字最后一个位置。这样才能保证只出现一次。如果出现ai,aja_i,a_jai,aj相原创 2021-08-26 11:14:14 · 298 阅读 · 0 评论 -
ABC 215 E - Chain Contestant (状压DP)
链接题意:给出一个只包括A~J的字符串,定义一种子序列为:在这个子序列中,相同的字符必定连续出现,求出这样的子序列有多少个。数据范围:字符串长度1 <= n <= 1000分析:首先我们看题应该能想到用状压DP,那么我们考虑状态,我们用DP[i][j][k]表示当前状态i,j表示选取每个字符的状态,k表示以k字符结尾。知道怎么用状态表示我们就解决了一大半的问题,之后我们看当前状态i与其前一状态i-1,的关系,首先肯定得满足我们要有当前字符这个状态,如果末尾字符与上一状态相同,那么我们原创 2021-08-23 19:52:23 · 289 阅读 · 2 评论 -
CF 1559 E. Mocha and Stars (莫比乌斯反演+DP)
链接题意:给出n,m求满足以下条件的方案数ai∈[li,ri](i∈[1,n])a_i \in [l_i,r_i] (i\in[1,n])ai∈[li,ri](i∈[1,n])∑i=1nai≤m\sum_{i=1}^na_i\leq m∑i=1nai≤mgcd(a1,a2,...,an)=1\gcd(a_1,a_2,...,a_n)=1gcd(a1,a2,...,an)=1结果对998244353取模分析:首先我们抛开第三个条件gcdgcdgcd不看,那么这个就可以O(原创 2021-08-22 16:29:31 · 171 阅读 · 0 评论 -
最大子段和
问题 A: 最大子段和时间限制: 1 Sec 内存限制: 128 MB[提交] [状态]题目描述Geobiyye是一个喜欢思考问题的女孩子。Geobiyye给了你一个序列,她想求出这个序列的最大子段和。Geobiyye觉得这个问题太简单了,她将问题扩大了一倍。于是现在问题变成了:从这个序列中选出不相交的两个连续段,要求它们的和最大。换句话说,对于给定的长度为n的序列ai,你需要给出...原创 2020-04-19 23:03:14 · 563 阅读 · 0 评论 -
CF 597C. Subsequences(树状数组优化DP)
链接题意:n个数让你取m+1m+1m+1个递增元素。问方案数?分析:毫无疑问DP来做但是DP来做是O(n2m)O(n^2m)O(n2m)的复杂度肯定过不去,那么我么你转变思路,用dp[i][j]dp[i][j]dp[i][j]表示以i结尾,长度为j的方案数,那么他状态由dp[小于i][j−1]dp[小于i][j-1]dp[小于i][j−1]转移过来,那么我们只要维护出来小于一个数数量有多少就可降低复杂度。那么我们就可以用树状数组维护。先维护出m+1个树状数组然后找每一个小于其前一状态。状态转移方原创 2021-08-16 13:57:44 · 165 阅读 · 0 评论 -
ABC F - Substrings(DP+字符串)
链接题意:给出你一个字符串,让你取子串,不能连续取字符,问你有多少种方案数?对1e9+71e9+71e9+7分析:我们假设当前位置iii,dp[i]dp[i]dp[i]是以iii结尾的方案数。那么我们知道如果前面有一个与iii位置字符一致的字符假设是jjj那么dp[j]这个位置前面的贡献都已经被j这个位置取了,所以从dp[j]这个位置往前都不会再计算了。这样看来我们需要维护的复杂度最大是26N的。这样我们再考虑不能连续字符,那么我们就跳过一个字符不就可以了。当前位置为i,我们记录答案为dp[i+2原创 2021-08-16 10:51:24 · 149 阅读 · 0 评论 -
Educational Codeforces Round 98 D. Radio Towers (DP+数学)
链接题意:在一条数轴上共有 n+2n+2n+2个小镇,编号分别为 000 至 n+1n+1n+1 ,第 iii 个小镇位于点 iii 。你在编号为 111 至 nnn 的每个小镇里都有 12\frac{1}{2}21的概率建造了一个无线电塔。之后,你在每个无线电塔上设置了一个整数信号功率 p(1≤p≤n)p (1\leq p \leq n)p(1≤p≤n) ,对于所有的城市 ccc ,如果 ∣c−i∣<p|c-i|<p∣c−i∣<p(其中 iii 为该无线电塔所在的小镇的编号),那么原创 2021-08-09 20:03:25 · 160 阅读 · 0 评论 -
Codeforces Round #567 (Div. 2) C. Flag (计数DP)
链接题意:有个人想要卖国旗一面国旗可以抽象为一个n×mn\times mn×m的矩形,每一个位置有一个颜色。这个矩形由自上而下三条横向的颜色带组成,每一条颜色带宽度相等,而且相邻两个颜色带颜色不能相同。现在你有一个n×mn\times mn×m的矩形,你需要计算其中能够称为国旗的子矩形数量。分析:首先这样分析:类似一个这样的问题:找出长度为n的字串数量:如果原长度为5串为abcdeabcdeabcde我们选出先选出a长度为1总方案数+1然后加入b长度为2 总方案数+2(b,ab)然后加入c原创 2021-08-04 23:23:36 · 140 阅读 · 0 评论 -
CF1474D Cleaning (DP)(代办)
void solve(){ cin >> n ; for(int i = 1; i <= n; i++) { scanf("%lld", &a[i]); b[i] = c[i] = 0; } for(int i = 1; i <= n; i++) { if(b[i - 1] >= 0) b[i] = a[i] - b[i - 1];原创 2021-04-29 09:38:50 · 85 阅读 · 0 评论 -
Codeforces1480D1 D2. Painting the Array I(II)
D1. Painting the Array I题意:本题与 CF1480D2 的唯一区别是本题询问最大可能解.给定一个数组 aaa, 你将将 aia_iai染为bib_ibi色, 其中 bbb 是由你指定的一个 01 数组. 将 aaa 数组中被染成 0 色的数字取出来并依在 aaa 中出现的顺序排列, 组成数组 a(0)a^{(0)}a(0). 同理, 将 aaa 数组中被染成 1 色的数字取出来并依在 aaa 中出现的顺序排列, 组成数组 a(1)a^{(1)}a(1). 我们定义 seg(原创 2021-04-27 21:29:15 · 137 阅读 · 0 评论 -
Codeforces 1510D. Digits(DP+数学+思维)
题目链接题意:给出你nnn个数,让你任选其中几个数,是的乘积个位为mmm且乘积最大。思路:我们看题意中要求的,最大是n个数的乘积,我们没办法直接用long long 来表示,那么我们可以利用数学的转化,将数的乘积转化成数的加也就是x1∗x2∗....∗xn=2log2x1+log2x2+....+log2xn x_1*x_2*....*x_n=2^{log_2^{x_1}+log_2^{x_2}+....+log_2^{x_n}}x1∗x2∗....∗xn=2log2x1+log2x2原创 2021-04-23 17:41:23 · 197 阅读 · 0 评论 -
CF687 D2 C. Bouncing Ball(DP)
题目链接题意: 给出你长度为nnn的一个序列,你需要从第mmm个开始计算,周期是kkk(每隔kkk个取一次),你想每次取的都是111 你可以进行两种操作:变换,将一个位置为0的转化成1花费xxx代价删除第一个,删除是否整体前移一位,代价是yyy题解: 我是fw就是从后往前看是否需要变换,然后从前往后看删除前面的数代价大还是不删除代价大.简单的说就是,两种方式 变换与删除,表示就OK了。变换:因为我们是从前往后删数,所以后面的相对不变化所以我们就需要维护这个相对不变化的。就像前缀和一样维护出原创 2020-11-29 21:52:04 · 239 阅读 · 0 评论 -
M. Magic spells (区间DP)
M. Magic spellstime limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard outputThe Ultra Nice Abracadabra List (UNAL) is a list of n magic spells for young student wizards in the school of magic, a magic spell is原创 2020-11-23 19:46:51 · 284 阅读 · 0 评论 -
问题 K: 最勇敢的机器人(并查集+背包)
问题 K: 最勇敢的机器人时间限制: 1 Sec 内存限制: 128 MB题目描述机器人们都想知道谁是最勇敢的,于是它们比赛搬运一些物品。它们到了一个仓库,里面有n个物品,每个物品都有一个价值Pi和重量Wi,但是有些物品放在一起会爆炸,并且爆炸具有传递性。(a和b会爆炸、b和c会爆炸则a和c会爆炸)机器人们可不想因此损失自己好不容易从Wind那里敲诈来的装备,于是它们想知道在能力范围内,它们最多可以拿多少价值的物品。你能帮助它们吗?输入每组测试数据第1行为n,Wmax,k(0<=n,原创 2020-11-22 23:33:32 · 161 阅读 · 0 评论 -
Polygon(区间DP)
题目描述Polygon is a game for one player that starts on a polygon with N vertices, like the one in Figure 1, where N=4. Each vertex is labelled with an integer and each edge is labelled with either the symbol + (addition) or the symbol * (product). The edges原创 2020-11-22 12:31:16 · 230 阅读 · 0 评论 -
区间DP
首先引出问题:石子合并:好像讲区间DP的都是先用石子合并,毕竟是老经典题目了。一维区间DP:石子合并题目描述:有n堆石子排成一排,每堆石子有一定的数量。将n堆石子并成为一堆,每次只能合并相邻的两堆石子,合并的花费为这两堆石子的总数。经过n-1次合并后成为一堆,求总的最小花费。输入:第一行是整数n,表示有n堆石子。第二行有n个数,分别表示这n堆石子的数目。输出:总的最小花费。输入样例:32 4 5输出样例:17提示:样例的计算过程是:第一次合并2+4=6;第二次合并6+5=11;总花费原创 2020-11-11 14:34:05 · 302 阅读 · 0 评论 -
问题 G: 小y的圈路
知识点:DP 具体点就是 计数DP 线性DP 和其他DP问题 G: 小y的圈路时间限制: 1 Sec 内存限制: 128 MB[提交] [状态]题目描述写完作业,无聊的小Y开始研究圈路有一个n×n的由非负整数组成方阵。你要找到满足以下要求的路径:(1)从矩阵的左上角开始(2)只能向右方或下方的格子走;(3)在右下角结束。此外,如果我们将这条路上的所有数字相乘,得到的结果应该有...原创 2020-05-08 10:04:54 · 310 阅读 · 2 评论