dp
文章平均质量分 88
C202044zxy
这个作者很懒,什么都没留下…
展开
-
CF1446C Xor Tree
一、题目点此看题二、解法原创 2020-12-04 12:17:34 · 297 阅读 · 0 评论 -
CF1442D Sum
一、题目点此看题二、解法一定要充分利用题目条件。第一个明显的题目条件是 aaa 数组单调不降,那么我们最后的选取一定是至多部分选取一个数组。证明可以用反证法,假设部分选取了两个数组,那么不优。然后题目变成了对数组编号为 [1,x),(x,n][1,x),(x,n][1,x),(x,n] 的做 0/10/10/1 背包,然后用 O(k)O(k)O(k) 的时间看部分选取多少。算法瓶颈在第一个部分,max\maxmax 型的背包不能做退背包,所以我们可以用分治解决。#include <cst原创 2020-12-03 17:53:01 · 198 阅读 · 0 评论 -
CF1437F Emotional Fishermen
一、题目点此看题二、解法嗯,这个题比较有启发性。这种 nnn 比较大的排列计数的题做法应该比较唯一吧:先思考最后的排列怎么样,然后想各种办法去计数。这道题最后的排列一定长这个样子:其中 bib_ibi 表示某一段前缀的最大值,那么我们计数可以以 bib_ibi 为关键点,设 f[i]f[i]f[i] 为最大值为 aia_iai 的方案数,初始化 f[0]=1f[0]=1f[0]=1,答案是 f[n]f[n]f[n],我们首先需要把 aaa 数组排序。考虑转移,其实就相当于把 aaa 填到原原创 2020-12-03 16:13:35 · 384 阅读 · 0 评论 -
[unknown OJ] ZZH与计数
写了1个小时的博客,我是哥哥原创 2020-12-02 17:05:24 · 322 阅读 · 1 评论 -
[unknown OJ] ZZH的旅行
一、题目点此看题二、解法#include <cstdio>#include <vector>#include <iostream>#include <queue>using namespace std;const int M = 1000005;int read(){ int x=0,f=1;char c; while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;} while原创 2020-12-02 08:28:59 · 287 阅读 · 0 评论 -
[LOJ 6039] 珠宝
一、题目原创 2020-11-26 17:50:36 · 368 阅读 · 0 评论 -
[unknown OJ] 游戏
一、题目点此看题二、解法当 x+y+zx+y+zx+y+z 不是333的倍数的时候无解。一看就是 dpdpdp 的题了,先把暴力一下的写出来,设 dp[i][j]dp[i][j]dp[i][j] 为这个状态到分配完成的期望轮数(i=z−x,j=z−yi=z-x,j=z-yi=z−x,j=z−y,zzz最大),也就是我们用一个差分的形式来表示状态,转移:dp[a][b]=12dp[a−2][b−1]+12dp[a−2][b−1]+1dp[a][b]=\frac{1}{2}dp[a-2][b-1]+\原创 2020-11-22 22:16:55 · 161 阅读 · 0 评论 -
[unknown OJ] 水箱
一、题目n,m≤1e5,T≤5n,m\leq 1e5,T\leq 5n,m≤1e5,T≤5二、解法和这道题很像:施工原创 2020-11-18 21:38:50 · 148 阅读 · 1 评论 -
[unknown OJ] 施工
一、题目点此看题二、解法方法1 fnm dp看数据范围,如果从dpdpdp的角度来思考,那么设dp[i]dp[i]dp[i]为..................(只有这种定义可行一点了)增加高度很重要?状态定义又不能要。那么我们定义dp[i]dp[i]dp[i]为iii作为不动建筑的最小花费(分为两种),问题是这种定义是否能转移?dpdpdp的本质是所有可能情况的枚举,我们不妨枚举一段都升高了(显然会枚举所有情况),如何升高我们暂时还不知道,需要分析。首先iii和jjj(这一段的左边那个)一定原创 2020-11-17 10:59:01 · 121 阅读 · 0 评论 -
[nowcoder 2020] 牛半仙的妹子序列
一、题目点此看题二、解法很容易看出可以dp\tt dpdp,O(n2)O(n^2)O(n2) 暴力dp\tt dpdp可以看我考试时候的注释。/*dp[i]为以i结尾的妹子序列个数dp[i]+=dp[j]第一个条件是结尾的是后面这一堆中最小的第二个条件是开头的是前面这一堆中最大的第三个条件是v单调递增,并且j是小于vi的最大值 */本题将介绍三种方法:乱搞ac\tt acac、神奇线段树、cdq\tt cdqcdq分治0x01 乱搞因为我往往想不到正解,所以这才是我的方法。乱搞虽原创 2020-11-07 09:59:07 · 273 阅读 · 0 评论 -
[BJOI2018] 治疗之雨
一、题目点此看题二、解法状态定义很显然,设dp[i]dp[i]dp[i]为从生命iii减少到000的期望轮数,转移:dp[i]=1+∑j=1i+1dp[j]×Qi,jdp[i]=1+\sum_{j=1}^{i+1} dp[j]\times Q_{i,j}dp[i]=1+j=1∑i+1dp[j]×Qi,j其中Qi,jQ_{i,j}Qi,j表示生命值一次从iii转移到jjj的概率,先考虑如何算它,题目限制较多,最宜分类讨论(下面表达式的系数是讨论增加生命值那次的概率):Qi,j={0i=n,j=原创 2020-10-25 16:35:44 · 233 阅读 · 1 评论 -
[SGU 183] Painting the balls
一、题目来源不详,好像是个外国网站。peterpeterpeter 把 nnn 个白球排成一列,他想把一些白球刷为黑色,且任意连续 mmm 个球中至少要有 222 个黑球,peterpeterpeter 知道他需要 CiC_iCi 的燃料刷第 iii个球,你的任务是找出 peterpeterpeter 所需的最少的燃料达到目标。2≤n≤104,2≤m≤100,m≤n2\leq n\leq10^4,2\leq m\leq 100,m\leq n2≤n≤104,2≤m≤100,m≤n二、解法数据范围原创 2020-10-24 16:19:29 · 506 阅读 · 0 评论 -
小 Y 的背包计数问题
一、题目https://loj.ac/problem/6089原创 2020-10-20 22:14:37 · 437 阅读 · 0 评论 -
[unknown OJ] 坚果
As the problem name,it's really a hard nut for me一、题目点此看题二、解法首先必须要对题意做一个并不简单的转化(在考试时候我想了很久才想出来),先按坚果从小到大排序,如果要打碎第iii个坚果,那么在最坏情况下需要把[i+1,n][i+1,n][i+1,n]都搞a[i]a[i]a[i]次,根据这个原理我们尝试写出dpdpdp方程式,设dp[i][j]dp[i][j]dp[i][j]为前iii个坚果中打碎jjj个的最小花费,转移:dp[i][w]=dp[原创 2020-09-29 21:21:54 · 163 阅读 · 0 评论 -
[unknown OJ] 植物大战僵尸
http://222.180.160.110:1024/contest/800/problem/4原创 2020-09-27 15:09:28 · 249 阅读 · 0 评论 -
CF1111E Tree
一、题目点此看题二、解法这道题不要被题目特点限制思路了,不一定是虚树的题目。有一个简单的dpdpdp,设dp[i][j]dp[i][j]dp[i][j]为前iii个数划分成jjj组的方案数,转移考虑第iii个数怎么划分,他不能和他的祖先划分到一起,设他的祖先个数为fff,那么他可以划分到的组别有max(0,j−f)max(0,j-f)max(0,j−f)组(因为一个点的祖先和祖先也存在冲突,所以祖先和祖先一定在不同组别),还可以独自划分一组:dp[i][j]=dp[i−1][j]×max(0,j原创 2020-08-19 22:05:53 · 261 阅读 · 1 评论 -
[CmdOI2019]任务分配问题
一、题目点此看题二、解法原创 2020-08-16 16:54:44 · 231 阅读 · 0 评论 -
CF939F Cutlet
一、题目点此看题二、解法神奇的状态定义,又是一道我这辈子都想不出来的题。设dp[i][j]dp[i][j]dp[i][j]为前iii秒烤了当前没有在烤的面jjj次,所需要的最小翻转次数,转移:dp[i][j]=min(dp[i−1][j],dp[i−1][i−j]+1)dp[i][j]=\min(dp[i-1][j],dp[i-1][i-j]+1)dp[i][j]=min(dp[i−1][j],dp[i−1][i−j]+1)解释一下i−ji-ji−j是怎么来的,考虑翻转一次,因为没在烤的面烤了j原创 2020-08-13 08:47:19 · 218 阅读 · 0 评论 -
CF675E Trains and Statistic
一、题目点此看题二、解法原创 2020-08-12 20:51:34 · 140 阅读 · 0 评论 -
CF1304F2 Animal Observation (hard version)
一、题目点此看题二、解法原创 2020-08-12 16:32:00 · 167 阅读 · 0 评论 -
CF372C Watching Fireworks is Fun
一、题目点此看题二、解法烟花和答案的计算有很大关系,而且烟花数也不多,尝试将其加入状态,所以定义dp[i][j]dp[i][j]dp[i][j]为考虑到第iii个烟花,现在位置在jjj,所得到的最小∣ai−j∣|a_i-j|∣ai−j∣和(最后用bbb减去它就得到了最大的开心值,这样更方便),转移:dp[i][j]=dp[i−1][k]+∣ai−j∣dp[i][j]=dp[i-1][k]+|a_i-j|dp[i][j]=dp[i−1][k]+∣ai−j∣这个转移要求j−td≤k≤j+tdj-td原创 2020-08-12 09:30:12 · 198 阅读 · 0 评论 -
[SDOI2010]代码拍卖会
一、题目点此看题二、解法虽然一眼看上去是数位dpdpdp,但这长度1e181e181e18明显不可做。还是要找规律,首先有一个我这辈子都想不到的转化,原来是数是形如11122233....11122233....11122233....,可以转化成11111111....11111111....11111111....,00011111....00011111....00011111....,00000011....00000011....00000011....的叠加,设cnt[i]cnt[i]c原创 2020-08-12 09:17:01 · 144 阅读 · 0 评论 -
CF1132E Knapsack
一、题目点此看题二、解法原创 2020-08-11 09:07:10 · 194 阅读 · 0 评论 -
CF1203F2 Complete the Projects
一、题目点此看题原创 2020-08-11 09:00:41 · 149 阅读 · 0 评论 -
CF744C Hongcow Buys a Deck of Cards
https://www.luogu.com.cn/problem/CF744C原创 2020-08-11 08:29:19 · 197 阅读 · 0 评论 -
CF28D Don‘t fear, DravDe is kind
一、题目点此看题二、解法首先l+c+rl+c+rl+c+r相同的分到一组,最优解一定只能出现在某一组内,每一组内单独做dpdpdp,设dp[i]dp[i]dp[i]为前面包括自己的人数和为iii的最大权值,每次只需要更新一次,所以时间复杂度是O(n)O(n)O(n)的,转移:dp[l+c]=dp[l]+vdp[l+c]=dp[l]+vdp[l+c]=dp[l]+v最后找出最优的那一组,再跑一遍还原路径即可。#include <cstdio>#include <vector>原创 2020-08-11 08:19:22 · 248 阅读 · 0 评论 -
CF837D Round Subset
一、题目点此看题二、解法这道题的roundness最大其实是要乘积质因数分解后222和555较小的那个最大,都要放入状态中,设dp[i][j]dp[i][j]dp[i][j]为选了iii件物品,因数555的个数为jjj,得到的最大因数222的个数,转移:dp[i][j]=dp[i−1][j−five[i]]+two[i]dp[i][j]=dp[i-1][j-five[i]]+two[i]dp[i][j]=dp[i−1][j−five[i]]+two[i]转移时注意一下顺序都要从大到小。#inclu原创 2020-08-10 08:08:38 · 165 阅读 · 0 评论 -
CF1101F Trucks and Cities
一、题目点此看题二、解法可以把加油理解成划段,那么题目转化成求点[i,j][i,j][i,j]之间划kkk段最大的段的最小值是多少,对于所有的车算出这个值乘以ccc,然后取最大值就是打啊。设dp[i][j][k]dp[i][j][k]dp[i][j][k]为[i,j][i,j][i,j]划kkk段的最大段最小值,转移:dp[i][j][k]=max(dp[i][l][k−1],t[j]−t[l])dp[i][j][k]=\max(dp[i][l][k-1],t[j]-t[l])dp[i][j][原创 2020-07-29 11:41:13 · 145 阅读 · 0 评论 -
CF825F String Compression
一、题目点此看题原创 2020-07-28 19:39:55 · 250 阅读 · 0 评论 -
CF747F Igor and Interesting Numbers
一、题目点此看题二、解法首先要确定答案的位数,可以算固定位数不含前导000的答案,有一个关键的dpdpdp,设dp[i][j]dp[i][j]dp[i][j]为iii个字符选jjj个,转移如下:dp[i][j]=dp[i−1][j−k]×C(j,k)dp[i][j]=dp[i-1][j-k]\times C(j,k)dp[i][j]=dp[i−1][j−k]×C(j,k)一开始需要先选首位,确定了位数之后,我们再从高到低每一位来确定值,也是用类似的方法,如果方案数够了就可以确定了。#include原创 2020-07-16 15:49:59 · 161 阅读 · 0 评论 -
CF1327F AND Segments
一、题目点此看题二、解法对于这类二进制问题,由于每一位是独立的,我们可以把每一位分开来看,这道题就是求出每一位的方案数最后求乘积即可。现在问题就变成了一段区间全为111或者一段区间不全为111,定义dp[i]dp[i]dp[i]为第iii位选000,前面全合法的方案数,答案是dp[n+1]dp[n+1]dp[n+1],如果这一位钦定选111那么dp[i]=0dp[i]=0dp[i]=0,转移就是找到一个右端点比iii小,左端点(记为lll)最大的不全选111的区间,必须在这其中选000:dp[i]原创 2020-07-16 08:36:41 · 117 阅读 · 0 评论 -
CF712E Memory and Casinos
一、题目点此看题二、解法这道题正向走不通,要反向做,设dp[i]dp[i]dp[i]为iii到终点的概率:fi=fi−1×(1−pi)+fi+1×pif_i=f_{i-1}\times(1-p_i)+f_{i+1}\times p_ifi=fi−1×(1−pi)+fi+1×pifi−fi−1=pi(fi+1−fi)f_i-f_{i-1}=p_i(f_{i+1}-f_i)fi−fi−1=pi(fi+1−fi)设gi=fi−fi−1g_i=f_i-f_{i-1}gi=fi−fi−原创 2020-06-18 19:55:48 · 195 阅读 · 0 评论 -
[SNOI2017]遗失的答案
一、题目点此看题二、解法首先为了方便,可以把nnn和LLL都除以GGG,特判掉LLL不能整除的情况。现在就是要让gcd=1\gcd=1gcd=1,lcm=Llcm=Llcm=L,我们先把LLL质因数分解,手算可知最多只会有888个不同的质数,我们可以定义一个状态,前888位表示选出来的这些数有没有在当前质数位上指数的000的(保证gcd=1gcd=1gcd=1),后面888位表示选出来的这些数有没有在当前质数位上指数和lcmlcmlcm相等(保证lcmlcmlcm),选的数只能够在LLL的因数中选原创 2020-06-10 15:23:33 · 161 阅读 · 0 评论 -
[NOI Online #3 提高组]优秀子序列
一、题目点此看题二、解法首先有一个朴素dpdpdp,因为每个数位都只会最多出现111次,而且出现数位相同的不同情况最后也可以一起算答案(和一定),那么我们只需要统计出方案数,dp[i]dp[i]dp[i]为二进制位出现的装压为iii,转移枚举包含iii的状态jjj,设a[i]a[i]a[i]为值iii出现次数,000需要单独考虑,转移为:dp[j]=dp[j⊕i]×a[i]dp[j]=dp[j\oplus i]\times a[i]dp[j]=dp[j⊕i]×a[i]这样做O(min(a,n)a)原创 2020-05-28 15:49:53 · 237 阅读 · 0 评论 -
[HEOI2016/TJOI2016]序列
一、题目点此看题二、解法首先有一个显然的dpdpdp,设dp[i]dp[i]dp[i]为任意用一个变化,以iii结尾的最长不降子序列长度:dp[i]=dp[j]+1dp[i]=dp[j]+1dp[i]=dp[j]+1当然这个转移需要满足若干个条件,比如ti≥tjt_i\geq t_jti≥tj(出现时间),mini≥valjmin_i\geq val_jmini≥valj,vali...原创 2020-05-01 11:37:11 · 193 阅读 · 0 评论 -
[SDOI2011]拦截导弹
一、题目点此看题二、解法设f[i]f[i]f[i]为以iii点结束的最长不降子序列个数,可以cdqcdqcdq分治,递归的时候我们已经处理出了[l,mid][l,mid][l,mid]的fff值,我们要拿他去更新[mid+1,r][mid+1,r][mid+1,r]的fff值,需要满足hi≥hj,vi≥vjh_i\geq h_j,v_i\geq v_jhi≥hj,vi≥vj才能更新,...原创 2020-05-01 10:09:11 · 257 阅读 · 0 评论 -
A Simple Chess
一、题目点此看题马走日,问禁止一些点的情况下起点到终点的方案数,模110119110119110119二、解法先考虑没有限制两个点的情况,设xxx方向需要移动aaa,yyy方向需要移动bbb,设p=(a+b)/3p=(a+b)/3p=(a+b)/3,所以方案数是C(p,a−p)C(p,a-p)C(p,a−p),就是说每一步x,yx,yx,y都会至少靠近111,而xxx还需要走额外a−pa-...原创 2020-04-27 21:24:41 · 172 阅读 · 0 评论 -
[HEOI2013]Eden 的新背包问题
一、题目点此看题二、解法暴力的做法就不说了,我们可以从前往后,从后往前来跑背包,设为f1[i][j],f2[i][j]f_1[i][j],f_2[i][j]f1[i][j],f2[i][j],询问时我们排除给定的物品,找到l,rl,rl,r,然后合并f1[l]f_1[l]f1[l]和f2[r]f_2[r]f2[r],合并一次是O(e)O(e)O(e)的。具体实现有一个小技巧,把多重...原创 2020-04-26 10:14:06 · 197 阅读 · 0 评论 -
[BZOJ 4899] 记忆的轮廓
一、题目原创 2020-04-24 20:38:42 · 238 阅读 · 0 评论 -
HDU 2865 Birthday Toy
一、题目题目描述有一个nnn个点的环,相邻两点连边,有一个中心点向所有点连边,对这个环kkk染色,求旋转后本质不同的方案数。数据范围3≤n≤1e9,4≤k≤1e93\leq n\leq1e9,4\leq k\leq1e93≤n≤1e9,4≤k≤1e9二、解法首先中间的点只能是一种和其他点不一样的颜色,先钦定中间的颜色,其他的就变成了k−1k-1k−1染色,外面套一个burnside\t...原创 2020-04-17 22:10:41 · 191 阅读 · 0 评论