随笔分类 - DP
摘要:传送门 分析 我们不难发现这是一棵树 于是01分数规划然后树上dp即可 代码
阅读全文
摘要:传送门 分析 f[i][S](S∈[0,4])表示第iii个食物没有被选/左边选/右边选/同时选的状态是由哪一个状态转移来的 我们需要满足两个条件: 每个人只能选择一个 改变选择之后不会比当前获得热量多 讨论$a_i$和$a_{i-1}$的大小关系进行转移 输出方案的时候由后向前推过去就好 先固定第
阅读全文
摘要:传送门 分析 https://www.luogu.org/blog/FlierKing/solution-p2501 对于第二问的感性理解就是有上下两条线,一些点在上面的线的上面或者下面的线的下面,然后看它们变成哪个线的位置更优 代码
阅读全文
摘要:传送门 分析 其实我们可以很巧妙的把这道题转化成一道线段覆盖的问题,怎么转化呢?对于每一个描述,我们可以根据他所描述的比他高的和比他矮的人数来构造一条线段,左端点l即为y+1,右端点r为n-x。当我们转化成线段以后,这一段线段就表示着分数相同的人数,那么显然,只有与这个线段完全重合的线段是符合要求的
阅读全文
摘要:传送门 分析 这个博客和我做法差不多,嘤嘤嘤 代码
阅读全文
摘要:传送门 分析 一道思路非常清奇的题目 我们记录一个dp[i][j]表示在j位置大小为i的数是否可以组成 如果可以组成则dp的值为组成这个数所需要的区间的右端点的右面那个点是多少 于是暴力dp即可 58这个数是40+18得出来的 代码
阅读全文
摘要:传送门 分析 我们假设主视图的颜色为1 如果只有两种颜色,且能求出w[x][y]表示一列中放置x个1和y个2的方案数 则我们可用dp[i][j][k]表示考虑到第i列放j个1和k个2的方案数,这样的复杂度为$O(n^5)$ 我们可以把颜色2和颜色3统一看成颜色2,最后方案数乘上$C_{b+c}^b$
阅读全文
摘要:传送门 分析 设dp[i]为进行i轮的最小值 所以不难得出dp[i]=Min(dp[i],dp[j-1]+(i-j+1)*dij(j,i)+k) dij(L,R)表示在[L,R]这几天的最小值 处理这几天哪些点不能走然后求最短路即可 注意dp[0]=-k 代码
阅读全文
摘要:传送门 分析 经典的树型DP 我们记录dp[i][0/1]表示i的子树中到i的长度分别为偶数和奇数的长度和 dp2[i][0/1]则表示不在i的子树中的点到i的长度分别为偶数和奇数的长度和 然后根据边的长度情况转移一下就可以了 代码
阅读全文
摘要:传送门 分析 01trie树好题! 我们先考虑将序列变为前缀和形式,在从1到n遍历每一个i 对于每一个i,我们把pre[i]插入trie中,在求出pre[i]与之前数的最大异或值 于是我们就可以得到dp[i]表示前i个数中是最大异或值 转移为dp[i]=Max{dp[i-1],q(pre[i])}
阅读全文
摘要:传送门 分析 dp[i][j]为考虑前i个位置,[i-j+1,i]中的颜色互不相同,并且ai-j与这段区间中的某一个位置颜色相同 我们枚举第i+1个位置和[i-j+1,i]中的哪一个颜色相同或者全部不同,进行转移 dp[i][j]=dp[i-1][j-1]*(m-j+1) dp[i][j]+=dp[
阅读全文
摘要:传送门 分析 令f(i,j)表示i点完全图有j个联通块的方案数。 讨论有i-1个点已经固定了,我们拉出一个代表元素然后讨论它的集合大小然后组合数算一下就可以了。 $$ dp(i,j) = \sum_{k=1}^{i-1} C_{i-1}^{k-1} dp(i-k,j-1) dp(k,1) $$ $$
阅读全文
摘要:传送门 分析 将所有字母分别转化为1~26,之后将字符串的空位补全为0,?设为-1,我们设dp[p][c][le][ri]表示考虑le到ri个字符串且从第p位开始考虑,这一位最小填c的方案数,具体转移见代码。 代码
阅读全文
摘要:传送门 题目大意 给定一个序列A,求翻转A中一个区间之后的最长不降子序列的长度即翻转的区间 分析 发现直接枚举翻转的区间的话是无论如何都不行的,于是有一个非常神奇的做法。我们再设一个序列B = {0,1,2,3,4,5,6,7,8,9},然后我们枚举翻转B中的哪一段,假设我们翻转[5,8]z这一段,
阅读全文
摘要:传送门 分析 我们可以用dp[i][j][k][0/1]表示A串考虑到第i个,B串考虑到第j个,一共取了k个子串,现在的A[i]是否被选的方案数。我们需要将第一维滚动一下。具体转移见代码。 代码
阅读全文
摘要:传送门 分析 我们不难将条件转换为前缀和的形式,即 pre[i]>=pre[i-1]*2,pre[i]>0,pre[k]=n。 所以我们用dp[i][j]表示考虑到第i个数且pre[i]=j的情况下的方案数。我们发现一一转移的复杂度并不行,于是我们考虑只让dp[i-1][j]转移到dp[i][j*2
阅读全文
摘要:传送门 分析 此题关键在于想出dp[i][j][k]代表考虑到第i行,还能放1的的共有j列,还能放2的共有k行。之后就枚举每一行是没有还是1个1还是2个1还是1个2,然后转移即可。 代码
阅读全文
摘要:传送门 分析 一眼看去我们自然会想到dp[i][j][k]表示区间[i,j]中选k个子段的最大值。然后我们考虑降去一维。我们设dp[i][j]表示考虑了前i个数,在选了a[i]的情况下共有j个子段的最大值,于是可以列出转移方程式dp[i][j]=Max{dp[i-1][j],Max{dp[k][j-
阅读全文

浙公网安备 33010602011771号