DP
文章平均质量分 91
HT008_123
家人们点点关注叭
展开
-
[Rocky Mountain Regional Programming Contest 2019] Water Later
题目描述:给你一个字串,你每次可以选择一段连续的相同的字符删去,但是你以但选择了一种类型,你就必须把这个类型的所有区间段都删去,才可以考虑选下一种类型。问最少几步可以清空字串。题目分析:对于字符串中的种类其实是特别少的 那么我们可以枚举状态 1表示在这个状态里这种字符已经全部消去了对于状态i来说 我们可以枚举其中消去的字符j 然后从i状态去除j的状态转移过来 现在的问题就是对于去除了j的状态需要花几次去消出所有的j。我们可以预处理一个cnt[sta][i]数组表示的是在sta这个状态下去除所有的原创 2020-09-19 14:42:00 · 387 阅读 · 0 评论 -
[2019 ICPC Malaysia National] Military Class
题目描述:给出两列士兵 第一行的i可以与第二行的j ( |i-j|<=e ) 配对 其中有k对不能匹配 现在求有多少种完全匹配方案 对1e9+7取模题目分析:看到e<=4也就是说某一个人能跟他匹配的很少 那么就可以用状压来表示第i个第一行的数字可以与其匹配的数字的匹配状态 然后加个记忆化搜索就可以了题目链接:Gym - 102219F代码:#include <cstdio>#include <iostream>#include <cstring&g原创 2020-09-19 13:12:03 · 239 阅读 · 0 评论 -
[NOIP/CSP 2019 提高组] 括号树
题目描述:QAQ…题目分析:设 dp[i]为1-x内合法的子序列括号树num[i]表示i到根的路径上连续已经匹配的括号串数last[i]表示最后一个为匹配的 ( 位置首先 dp[i] 和 last[i] 都要承接父亲的答案如果 i 为 ( 那么更新 last[i]=i如果 i 为 ) 并且有没有匹配的左括号那么 last[i]=last[fa[last[i]]]num[i]=n...原创 2019-11-28 15:36:55 · 1078 阅读 · 0 评论 -
[蓝桥模拟] 蒜头君王国
题目描述:有N个点,每两个点都有P的概率建边,问最后N个点联通概率题目分析:概率DP。首先 如果只有一个点 Ans=1两个点 Ans=p我们设 F(n) 为 n个点联通的概率 G(n) 为n个点不联通的概率显然 F(n)=1.0-G(n)目前有i个点,枚举j个点为联通的,那么第i个和j-1个点联通概率即为F(j)∗Cj−1i−1F(j)*C_{j-1}^{i-1}F(j)∗Cj−1...原创 2019-11-27 00:32:36 · 204 阅读 · 0 评论 -
[NOI 2015]寿司晚餐
题目分析:对于一个数而言 我们选一个数就相当于选这个数的所有质因数 两个数只要没有相同的质因数即为互质 对于一个数N , N中大于n√\sqrt{n}的质因数至多只有一个 Nn√\sqrt{n} 只有 8 个 考虑状压:对于每个数 我们可以把它分为两部分 状态S表示 i 这个数分解质因数后小于n√\sqrt{n}的质因数二进制表示 r 表示 i 这个数在 去除了小于n√原创 2018-01-23 10:01:01 · 231 阅读 · 0 评论 -
[BZOJ 3156] 防御准备
题目描述:一条线上N个(检查)点,编号1~N,一个点j上可以建一个守卫塔花费为a[j],也可以选择放个木偶(为什么会是木偶= =),花费是这个点右边建的第一个守卫塔i到这个点的距离,即i-j。问最小花费。题目分析:先写出朴素DP: 倒着DP。 首先DP[i][0]为安排好 i+1-n 且在 i 放置 木偶的 最小花费. DP[i][1]为安排好 i+1-n 且在 i 放置 防御塔...原创 2018-02-26 09:16:36 · 171 阅读 · 0 评论 -
[SDOI2017]序列计数
题目描述:雾。题目分析:f1[i][j]表示任意选i个1~m内的数,和模p为j的方案数,f2[i][j]表示选i个1~m内的不是质数的数,和模p为j的方案数,f1[n][0]-f2[n][0]就是答案,矩阵乘法加速DP就可以了,复杂度O(m+p^3logn) 。题目链接:Ac 代码:#include<cstdio>#include<...原创 2018-03-05 09:14:59 · 177 阅读 · 0 评论 -
[SDOI2016]征途
题目描述:雾.题目分析:朴素DP O(M*N^2)60 dp[i][p]=min(dp[j][p−1]+(s[j]−s[i])∗(s[j]−s[i]))dp[i][p]=min(dp[j][p−1]+(s[j]−s[i])∗(s[j]−s[i]))dp[i][p]=min(dp[j][p-1]+(s[j]-s[i])*(s[j]-s[i])) 斜率优化 O(M*N)100 d...原创 2018-03-05 20:02:00 · 283 阅读 · 0 评论 -
[BZOJ 4774] 修路
题目描述:给出 N 个点 和 M条边 以及 d 对于任意 1<=i<=d 要使得 i 与 n-i+1联通 求最小代价题目分析:emmmm 本题是最小斯坦纳树的题目. 具体什么是斯坦纳树呢,就是使得图上的某些特定点联通. 本题就是要我们求一个最小生成斯坦纳树. 我的理解就是图上的状压DP. 令f[i][s]表示以i为根节点且特定点的存在情况为状态最小联通代价...原创 2018-04-10 09:41:17 · 183 阅读 · 0 评论 -
[JLOI2015] 管道连接
题目描述:给出一张图 给出若干个点和其频率,要求相同频率的点可以连通,求最小代价。题目分析:观察到带频率的点数很少,只有10个左右 那我们就可以做斯坦纳树 这些相同频率的点形成一个斯坦纳树,其实最后形成的是个斯坦纳树森林,所以最后要搞一下子集DP(雾题目链接:Luogu 3264 BZOJ 4006Ac 代码:#include <cstdi...原创 2018-04-10 09:41:34 · 274 阅读 · 0 评论 -
[Sdoi2008] Sue的小球
题目描述:雾。题目分析:定义状态f[i][j][0/1]为取完i-j的小球最后取i/j上的小球所能获得的最大价值 先排一下序,搞一下区间DP题目链接:Luogu 2446 BZOJ 2037Ac 代码:#include <cstdio>#include <iostream>#include <cstring>...原创 2018-03-27 21:41:26 · 238 阅读 · 0 评论 -
[TJOI2013] 单词
题目描述:qwq.题目分析:对fail指针的理解还是不够哇qwq fail[u]所代表的串,其实是u所代表的串的后缀. 而后缀可以表示出所有的子串 每个节点初始值为1,代表前缀出现过一次 从 u->fail[u]连一条边,那么fail[u]这个串的出现的次数,就是它的fail树子树和 用倒叙BFS序进行统计题目链接:BZOJ 3172 Luogu 3966...原创 2018-04-03 15:23:37 · 160 阅读 · 0 评论 -
[JSOI2007] 文本生成器
题目描述:qwq.题目分析:惊了,居然可以在AC自动鸡上跑DP(大雾 直接算好像比较困难,所以考虑先算不可读的串的个数,再拿总串数去减。 不可读的串的数量就是在AC自动机上走M步而不经过结尾节点(包括结尾点和fail指向结尾点的节点)的路径条数。 f[i][j]表示路径长度为i在自动鸡上j节点的方案数 那么f[i][j]可以转移f[i+1][son[j][k]] 最后算一...原创 2018-04-03 16:17:53 · 403 阅读 · 0 评论 -
[APIO 2010] 特别行动队
题目描述:雾。题目分析:f[i]=f[j]+a*(sum[i]-sum[j-1])^2+b*(sum[i]-sum[j-1])+c2*a*sum[i]*sum[j-1]+f[i]=f[j]+a*sum[j-1]^2-b*sum[j-1]+(a*sum[i]^2+b*sum[i]+c)题目链接:COGS 2129 BZOJ 1911 Luogu 3628Ac ...原创 2018-02-26 08:00:16 · 224 阅读 · 0 评论 -
[APIO 2014] 序列分割
题目描述:给你一个序列,让你分割K次,每次分割可以获得分割点前后两个块和乘积的价值 求最大价值题目分析:首先分割次序对总价值没有影响。 f[k][i]表示前第k次分割点为i的所获得的最大分割价值. f[i][k]=f[j][k−1]+(sum[i]−sum[j])∗sum[j]f[i][k]=f[j][k−1]+(sum[i]−sum[j])∗sum[j]f[i][k]=f[j]...原创 2018-02-25 21:04:44 · 252 阅读 · 0 评论 -
[HDU 3507] Print Article
题目描述:给出N个数的权值,以及一个参数K. 每次取出一段数的花费为 sum[l-r]^2+k 求取出这些数的最小花费题目分析:O(N2)DPO(N^2) DP dp[i]=min(dp[j]+(sum[i]−sum[j])2)dp[i]=min(dp[j]+(sum[i]-sum[j])^2) O(N)斜率优化O(N) 斜率优化dp[j]+sum[i]^2-2*sum[i]*sum[j]原创 2018-02-26 14:45:46 · 294 阅读 · 0 评论 -
[Luogu P3515] [POI2011] Lightning Conductor
题目描述:已知一个长度为n的序列a1,a2,…,an。对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j))题目分析:解法:决策单调性 + 分治 首先我们可以向两边枚举,分别取 Max 令 f[i]=max(1<= j < i)(a[j]+sqrt(i-j)) 因为根...原创 2018-02-26 15:47:16 · 179 阅读 · 0 评论 -
[BZOJ 3437] 小P的牧场
题目描述:雾。题目分析:只写DP方程吧. dp[j]+h[j+1]-(sum[i-1]-sum[j]) * (n-i) >dp[k]+h[k+1]-(sum[i-1]-sum[k])*(n-i) h[i]为 p[i]*(n-i)的后缀和 斜率优化. dp[j]+h[j+1]-(sum[i-1]-sum[j]) * (n-i)>dp[k]+h[k+1]-(sum[i-...原创 2018-02-26 16:55:35 · 153 阅读 · 0 评论 -
[Luogu 省选培训] 子序列
题目描述:给你一串由01组成的串 操作1:将[l,r]中的数取反,即0变为1,1变为0. 操作2:查询从[l,r]这个区间中本质不同的子串个数.题目分析:首先通过DP得到答案 DP[i][0]表示i位置结尾为0的本质不同的子串个数 DP[i][1]表示i位置结尾为1的本质不同的子串个数 当val[i]==0时 DP[i][0]=DP[i-1][0]+DP[i-1][1]...原创 2018-02-22 17:27:47 · 302 阅读 · 0 评论 -
[HEOI2016/TJOI2016] 序列
题目描述:雾。题目分析:先来分析一下50分的DP. DP[i]表示以i结尾可选出的最长原序列. DP[i]=max(DP[j])+1(maxv[j]<=val[i]&&val[j]<=minv[i],j < i) 其中 maxv为能够变化到的最大值,minv为能够变化到的最小值,val为原值 上面的DP方程显然。 这样转移为 N2N2N^2 ...原创 2018-02-24 11:21:33 · 368 阅读 · 0 评论 -
[HAOI 2009] 逆序对数列
题目描述:求1-n所形成的的排列中能形成K个逆序对个数的方案. 答案对10000取模题目分析:DP题… DP[i][j]为到i为止有j个逆序对方案数. DP[1][0]=1 因为i这个数比前面任何一个数都要大,那么如果插在第1个数字前面,就会形成i-1的逆序对 ….以次类推… 插在最后,形成不了逆序对. DP[i][j]=∑jk=max(i−j+1,0)dp[i−1]...原创 2018-02-25 11:20:43 · 274 阅读 · 0 评论 -
[HNOI2008]玩具装箱TOY
参考MashiroSky大佬的Blog题目描述:给定N个物品,可以连续的划分为若干个组,每个组的代价是(物品数-1+每个物品单独的代价-L)^2,求最小代价.题目分析:先写出DP方程:DP[i]=min(DP[j]+(sum[i]−sum[j]+i−j−1+L)2)(j<i)DP[i]=min(DP[j]+(sum[i]−sum[j]+i−j−1+L)2)(j&l...原创 2018-02-25 15:42:03 · 188 阅读 · 0 评论 -
[ZJOI 2007] 仓库建设
题目描述:雾。题目分析:先来搞朴素DP. DP[i] 表示 已经安排好了从1-i的仓库物品,并且在此地建一个仓库最小的花费 DP[i]=min(DP[j]+cal(i,j)+cost[i])DP[i]=min(DP[j]+cal(i,j)+cost[i])DP[i]=min(DP[j]+cal(i,j)+cost[i]) cal(i,j)表示从把[j,i-1]的物品运到 i 所需...原创 2018-02-25 19:41:33 · 248 阅读 · 0 评论 -
[SCOI2010] 股票交易
题目描述:赚大钱钱题目分析:很明显是个DP,先设计状态. DP[i][j]为第i天手里有j张股票能赚到的最多的钱. 初始化DP[i][j]=−ap[i]∗jDP[i][j]=−ap[i]∗jDP[i][j]=-ap[i]*j 转移: 1:DP[i][j]=max(DP[i][j],DP[i−1][j]1:DP[i][j]=max(DP[i][j],DP[i−1][j]1:D...原创 2018-04-11 14:13:57 · 282 阅读 · 0 评论 -
[SDOI2009] HH去散步
题目描述:雾。题目分析:本题由 矩阵乘法路径数问题 转化得来 [HDU 2157] 给一个N个点,M条边的有向无权图,求出两点x,y间长度为t的路径总和(允许重复经过),也就是说,从x出发走t步到y的方案数很明显,你可以考虑dp 设f[i][j][n]表示i出发现在走了n个时刻到j的方案数 a是邻接矩阵f[i][j][n]=∑a[k][j]×f[i][k][n−1]...原创 2018-03-29 08:47:28 · 165 阅读 · 0 评论 -
[SHOI 2014] 概率充电器
题目描述:QAQ…题目分析:P(A+B)=P(A)+P(B)−P(AB)P(A+B)=P(A)+P(B)−P(AB) P(A+B)=P(A)+P(B)-P(AB) 首先可以将元件能否充电分成3种情况考虑1、它自己给自己充好了电2、它的儿子方向给它传送了电3、它的父亲方向给它传送了电。1 是输入的 2 可以通过一次dfs做 3 麻烦一点,因为2中我们已经求得当前点...原创 2018-05-06 17:47:28 · 180 阅读 · 0 评论 -
[APIO 2007] 动物园
题目描述:QAQ…题目分析:观察到 一个小朋友只能观察5个围栏 那么我们状压 dp[i][s] 表示 从围栏 1- i [i-i+4] 的围栏移走状态为 s 所能收获的最大满意人数 num[i][s] 表示 围栏 从 i 开始的5个围栏移走状态为s的满意人数 预处理 num[i][s] 转移显然 dp[i][s]=max(dp[i−1][(s&15)<&l...原创 2018-05-07 17:02:32 · 529 阅读 · 0 评论 -
[HAOI 2010] 软件安装
题目描述:QAQ…题目分析:有依赖性关系的背包问题称为树形依赖背包… 用树形动归的方法解决 转移方程并不难 dp[i][j]表示以i为根的子树背包容量为j所能达到的最大价值 实际操作中我们可以用一个虚根来链接没有依赖的点… 这样的转移是 nm2nm2nm^2 的 听说黑科技可以做到 nmnmnmfor(int i=w[now];i<=m;i++) dp[now][...原创 2018-05-08 15:35:31 · 264 阅读 · 0 评论 -
百度之星 2018 资格赛 T1
老年人打一下百度之星。 A一题就行了… 很明显就是个状压DP…#include <cstring>#include <iostream>#include <cstdio>const int maxm=1100;int dp[maxm][1<<11],f[1<<11]; char s[maxm][11];inline...原创 2018-08-04 19:16:40 · 819 阅读 · 0 评论 -
[ACM日记] 个人训练赛14场
前言:过了三题,就这样。A:题目描述:题目分析:我们设定 C0表示目前J出现的次数,以此类推。如果区间[L,R]合法,那么C0L−C0R=C1L−C1R=C2L−C2RC0_L-C0_R=C1_L-C1_R=C2_L-C2_RC0L−C0R=C1L−C1R=C2L−C2R然后开map,记录一下C0-C1,和C1-C2,出现最早的位置,不停的扫取Max就好了。代码:#...原创 2019-07-12 22:36:40 · 239 阅读 · 0 评论 -
[ACM日记] 个人赛第15场
前言:只会两题了,再见A:题目描述:给出一个字符串,求本质不同的子序列个数。题目分析:对于一个字母可选可不选 所以答案就是每个字母出现次数+1的乘积代码:#include <cstdio>#include <iostream>#include <cstring>#include <cstring>#define ll lon...原创 2019-07-14 19:57:16 · 155 阅读 · 0 评论 -
[ACM刷题] DP数论专题
A:求B对P的逆元就好了www#include <iostream>#include <cstdio>#define int long longconst int mod=9973;int inv,p,s;int exgcd(int a,int b,int &x,int &y){ if(!b) { x=1;...原创 2019-07-23 10:36:12 · 286 阅读 · 0 评论 -
[CF 1068D] Array Without Local Maximums
题目描述:有N个数字,有的数字为Ai(1<=Ai<=200),有的数字为-1,-1表示这个数字不确定。但是这N个数字满足两个性质。1:每个数字只能为[1,200]中的一个数字2:每个数字的旁边两个数字至少有一个是大于等于这个数字的现在让你求这N个数字的可能出现的方案数题目分析:典型的DP。dp[i][j][0/1/2] 表示第 i 这个位置填 j 数字 并且与它左边的数...原创 2019-08-06 17:57:32 · 213 阅读 · 0 评论 -
[HZOI 2015] 疯狂机器人
题目描述:QAQ…题目分析:既然我们想要回到起点,那么就得让上下步数一样多,左右步数一样多,并且任何时刻上的步数比下的步数多,右的步数比左的步数多,然后你就会发现,这个模型不就是卡特兰数列的进出栈模型嘛… 设F(i) 表示 走 i 步回到起点且这 i 步里不包含不行走步数的方案数 定义 g(i) 表示只能上下走,不能左右和不走,回到起点的方案数 显然当 i为偶数是 g(i)=...原创 2018-05-11 16:01:46 · 234 阅读 · 0 评论 -
[SCOI 2009] Windy数
题目描述:如果一个数字相邻位上的数差的绝对值都>=2,称这个数为Windy数 现在给出一段区间,求这个区间里的Windy数数量题目分析:利用前缀和思想 我们可以计算出[1 - r]的Windy数 数量 减去 [1-(l-1)]的Windy数 数量… 预处理数组 dp[i][j]表示有i为最高位为j的Windy 数 数量 初始化 dp[1][1-9]=1 转移显然 枚举...原创 2018-04-26 09:56:18 · 193 阅读 · 0 评论 -
[九省联考2018] 秘密袭击coat
题目描述:QAQ…题目分析:正解需要: 1:整体DP… 2:多项式初步 3:拉格朗日插值法 4:生成函数 5:线段树合并 好的,全不会 看上面那堆算法,很多都是常数很大的东西,那么我们是不是可以用暴力算法卡卡常卡过去呢? 可以 方法来自于SD青岛二中神犇赛后讲解,暴力踩标算Orz 枚举一个点为第K大值的点,树上大于该点的点标为1,小于该点的标为0 那么我们可以...原创 2018-05-10 15:31:28 · 699 阅读 · 0 评论 -
[HNOI2004] 敲砖块
题目描述:敲砖块块题目分析:题解 我们可以不翻转三角形,只要搞一下顺序就好了题目链接:Luogu 1437Ac 代码:#include <cstdio>#include <iostream>#include <cstring>int dp[60][60*60][60];int a[60][60],sum[60...原创 2018-04-13 17:17:39 · 183 阅读 · 0 评论 -
[CQOI2018] 解锁屏幕
题目描述:解锁锁.题目分析:状压DP呀,预处理两个点链接需要的必经点,然后DP就好惹题目链接:BZOJ 5299 Luogu 4460Ac 代码:速度差距巨大… DP版:#include <cstdio>#include <iostream>#include <queue>const int mod=10000000...原创 2018-04-19 16:06:15 · 486 阅读 · 0 评论 -
[HNOI 2015] 亚瑟王
题目描述:n个人,r轮游戏,每次从左到右轮,第i个人有pi的概率被选中,选中的话本轮结束,产生di的贡献,否则接着轮 题目分析:讲解来自PoPoQQQ大神 首先要明确每轮选牌的顺序是对答案无影响的 比如我们选的是 1 2 4 3 其实算 1 2 3 4 是一样的 设dp[i][j]为第i张牌在r轮里选了j次的概率 那么转移即为 dp[i][j]=dp[i−1][j]∗(1...原创 2018-04-24 09:26:56 · 181 阅读 · 0 评论 -
[SDOI 2009] Bill的挑战
题目描述:QAQ…题目分析:N<=15,肯定是状压啦… 设dp[i][s]为当前匹配到第i位,字符串集合为s的方案数 转移就枚举第i位的字符即可 纯纯的暴力转移是不行的,我们预处理一个g[i][j]表示第i位如果字符是j能够匹配的字符串集合题目链接:Luogu 2167 BZOJ 1879Ac 代码:#include <cstdio>...原创 2018-04-24 10:54:43 · 184 阅读 · 0 评论