随笔分类 - 动态规划
摘要:题意:给你一个数$x$,每次有两种操作可以选择,一是从$x$跳到$[1,x-1]\(的任意一个数,二是跳到\)\lfloor \frac{x}{z} \rfloor\ \ (z \in[2,x])$.问你从$x$到一有多少种方案. 题解:假设$S(x)$为$x$能到达的所有位置的贡献$f(i)$集合
阅读全文
摘要:题意:给你一个数$x$,每次有两种操作可以选择,一是从$x$跳到$[1,x-1]\(的任意一个数,二是跳到\)\lfloor \frac{x}{z} \rfloor\ \ (z \in[2,x])$.问你从$x$到一有多少种方案. 题解:首先很容易写出dp公式,\(dp[t]=\sum_{i=1}^
阅读全文
摘要:题意:有一颗基环树,求它的最小点覆盖。 题解:先考虑环,对于环上的任意一条边$u->v$,一定只有2中情况,$u$覆盖的情况或$v$覆盖的情况。然后不难发现,假如我们将某个点覆盖,那么它的儿子一定不能覆盖,这其实就是树形dp。所以只有对覆盖$u$和$v$的情况分别跑一边树形dp然后取最小即可。 代码
阅读全文
摘要:题意:有$n$门课需要复习,每门课有$m$本资料,花费$y$时间可以是这门课得到$x$分,60分及格,剩下$t$时间,假设所有课现在不看资料去考试都是$0$分,问你在最多挂$p$门的情况下,总分最多能有多少,或者最少挂不止$p$门,输出$-1$. 题解:对于每门课,先背包求出花费时间能得到的最多分数
阅读全文
摘要:题意:给你一个序列A,每个元素为$+ \ x$或者$-$,假设$S$是$A$的一个子序列,那么便利$S$,$+\ x$表示贡献加上$x$,$-$表示贡献减去$S$中最小的$x$,并且在序列中删去这个$x$,问所有子序列的和为多少(\(\mod 998244353\). 题解:先假设一个子序列集合$S
阅读全文
摘要:题意:有一长度为$n$的序列,问有多少种方式将其分成连续的$k$个序列$B_1,B_2,...,B_k$,使得对于每个$i\ (1\le i\le k)$都能整除$B_i$的元素和. 题解:设$dp[i][j]$为取前$i$个数分成$j$个$B$序列的方法数.那么可以写出一个比较暴力的$dp$转移式
阅读全文
摘要:题意:有一$01$串,$?$既可以表示成$0$也可以表示成$1$,问其所有子串中,问有多少不出现相邻相同字符的子串。 题解:根据题意,合法串一定0101这样的,那么当前位置的1/0肯定是从上个位置的0/1转移过来,如果上个位置的字符和当前相同,那么就重新开始。由此可以写出状态转移方程:\(dp[i]
阅读全文
摘要:题意:有$n$个数,可以使任意两个子数组(不重叠)的元素贡献*2,问你操作后整个数组的最大元素和是多少. 题解:假如我们只能操作的一次的话,这题完全可以转换为求最大子段和,即先求出所有元素和,然后再加上最大子段和即可,但是现在我们需要求出两个最大子段和,也就意味着在操作一次的基础上,可以使区间断开分
阅读全文
摘要:题意:有一颗树,每个结点都有一个取值范围$[L_i,R_i]$,答案为所有相邻点的绝对值之差之和,现在要你确定每个点的值,求最大答案. 题解:求相邻点的最大绝对值之差,那么肯定是取两个点的左端点和右端点最优,树形dp板子题. 代码: #include <bits/stdc++.h> #define
阅读全文
摘要:题意:将$2n$个点两两相连形成$n$对,对于任意两个点对$A$和$B$,要求至少满足其中一条:1.$A$和$B$的某一个完全包含于另一个中 2.$A$和$B$的长度相等.问你一共有多少种方案. 题解:假设第一个区间的左端点为$1$,右端点为$x$,对$x$分两种情况来分析. 1.\(x> n\),
阅读全文
摘要:题意:将$n$划分成小于$k$的正整数之和的方案数. 题解:设$dp[i]$为$i$的方案数,因为最小的能取的数是$k$,所以$dp[i]=dp[i-k]+dp[i-k-1]+...dp[0]$,这样转移过来,而$dp[i-1]=dp[i-k-1]+dp[i-k-2]+...+dp[0]$,所以可以
阅读全文
摘要:题意:有$n$个座位,刚开始有$k\ (k\le \frac{2})$个人坐着,你可以让某个人$i$移动到空的座位$j$,花费$|i-j|$,问你最少花多少使得刚开始坐着人的位置全部空出来. 题解:首先想了一下,这题必然不能贪心,$0$对于某两个$1$来说距离相等的话,状态就不确定.那么就只能考虑d
阅读全文
摘要:题意:你有$H$点体力和$S$点耐力,击杀一个怪物$i$需要消耗$h_i$点体力和$s_i$点耐力,当体力为$0$时你就gg了,但是如果你当前的耐力不够击杀怪物所需要的耐力时,你可以用你的体力来透支你不够的耐力,之后你的耐力变为$0$.问你最多能得到多少金币. 题解:假如耐力不能透支的话,那么就是二
阅读全文
摘要:题意:一个含有$k$个中子的原子,如果$k\le n$,那么它就直接爆炸释放$a_k$大小的能量,否则它会分裂成含有$i$个和$j$个中子的原子(\(i+j=k\)),然后继续分裂.给你$n$和$a_1,a_2,...,a_n$,询问$q$次,每次问你一个含有$k$个中子的原子分裂产生的最小能量.
阅读全文
摘要:题意:有两个长度为$n$的数组$a$和$b$,你可以对$a$的子数组反转一次,问你$\sum_^a_i*b_i$的最大值. 题解:一眼区间dp的题目,对于长度为$len$的子区间$[l,r]\(,它可以从\)[l+1,r-1]$转移过来,那么我们设$dp[i][j]\(为子区间\)[i,j]$能得到
阅读全文
摘要:题意:有一个长度为$n$的排列,A和B进行博弈,每次操作可以在当前数$a_i$的基础移动到另一个位置,但是新的位置上的数$a_j>a_i$且$|i-j|$ mod \(a_i\)=0.A先手,问你所有$[1,n]$的情况中,A从$i$开始的结局情况. 题解:因为$a_i$每次只能移动到比自己大的数的
阅读全文
摘要:题意:给你$n$个升序的点,问你是否能构造一颗二叉搜索树,且每个儿子节点和父节点的$gcd>1$. 题解:首先可以预处理每两个点之间的$gcd$,我们先考虑暴力的写法,设$dp[l][r][k]\(表示区间\)[l,r]$以$k$为根节点是否合法,那么如果$dp[l][r]k]$要合法的话,其左儿子
阅读全文
摘要:题意:一长度为$n$的序列,有$m$个限制条件,问有多少排列方法使得题目所给的$m$个限制条件都满足. 题解:$n$给的范围很小,我们可以状态压缩,$v[num][j]$表示题目所给的限制条件前$num$个数最多不大于$y$的个数,我们可以枚举所有情况,然后判断每个状态是否和题目所给的条件冲突,如果
阅读全文
摘要:题意:给你$n$个数,有$q$个询问,每次询问一个区间,问你这个区间至少要分成多少个子区间,使得每个子区间的所有元素乘积等于它们的$lcm$. 题解:因为$lcm(x,y)=\frac{x*y}{gcd(x,y)}$,推广一下不难发现,要满足题目条件的话,区间内所有元素的$gcd=1$.即不能有公共
阅读全文
摘要:题意:有一个$n$x$m$的矩阵,相邻点之间都存在边权,每次可以移动到相邻点,问你每个点移动$k$次后并回到该点的最短边权和. 题解:如果$k$是奇数的话,一定不能走回到自己,因为线段来回来走两次或走一个矩阵,他们的边长和都是偶数.$dp[i][j][k]\(表示点\)(i,j)$走$k$次后回到自
阅读全文

浙公网安备 33010602011771号