DP
aaaabbbwwww
无
展开
-
【DP】没有上司的舞会(简单树形DP)
题意,给定一颗有根树,每个节点有一个权值,如果取父亲节点的权值,那么所有儿子节点的权值不能取。试规划一种节点选取方案,使得取到的节点权值和最大,只要求给出最大值。容易想到:父亲选了。父亲没选,儿子可以选,也可以不选。用dp[x][1]表示选了x节点后,x和其所有子孙的合规选法的最大权值和。用dp[x][0]表示没选x节点,其所有子孙的合规选法的答案权值和。(max(dp[x的儿子][1],dp[x的儿子][0]));状态的定义一定要明确好。不然父亲,儿子,孙子,容易搞晕的。(dp[x的儿子][0]);原创 2023-02-04 20:49:49 · 108 阅读 · 0 评论 -
【DP】需要注意的问题(自己踩过的坑)[持续更新]
1.多维数组初始化的时候,没有考虑维数是0的情况,(导致一个DP调了一上午才发现)原创 2023-01-20 12:20:57 · 82 阅读 · 0 评论 -
【DP】环形石子合并
然后我们只需要考虑 合并[1,n],合并[2,n+1],合并[3,n+2],..........合并[n-1,2*n-1]的这些答案里面取一个最大和最小的即可,剩下的问题就是一个基础的石子合并的问题了。给定几堆石子,这几堆石子围成一个环,每次合并可以合并两堆相邻的石子,本次得分为这次合并的两堆石子数的和,多次合并后的得分加在一起。然后比较好考虑的一个性质是,合并一次[l,r]或者说本次合并[l,r]的花费等于sum_a[l][r]关于合并石子,我用的记忆化,比较方便,循环推感觉不是很好考虑。原创 2023-01-19 19:02:25 · 118 阅读 · 0 评论 -
关于最长上升子序列有关的一些思考[蓝书思考题]
按照这样修改,肯定会将整个序列构造成一个非严格上升子序列,如果序列的所有第i元素对应加i,那么显然,整个序列将变得严格上升。【理解(不算严格的证明):很容易想到,除去非严格上升子序列里的元素,剩下的元素,只需要按照需要变成子序列里的元素就可以了,比如 5 1 1 4 2 6 1,最长非严格上升子序列 1 1 2 6,剩下的5 4 1,分别按照需要变成1 1 6即可】正确答案: 构造序列B[i]=A[i]-i,答案为序列长度-B的最长非严格上升序列长度。错误答案1:序列长度-最长非严格上升子序列长度。原创 2023-01-07 23:36:58 · 378 阅读 · 0 评论 -
【DP】摆花
实际上意思就是摆前i种花,用了j盆的方案数,可以从摆前i-1种花,用了0,1,....,k盆转移过来(k=j),那么很容易想到转移的时候,分别对应的,本阶段用了j-0,j-1,....,j-k盆花.给定一个A[i],第i种花不能摆放超过A[i]盆,并且花按种类编号1到n,并且摆放序列要求按编号升序。【注意,允许存在第i种花不摆放的情况!不难想到 用dp[i][j]表示摆放前i种花,用了j盆的方案数。如果j-k>a[i]那么就不能转移了。然后考虑实际上DP[i][0]=1。问摆放n种花m盆的方案数。原创 2023-01-07 11:55:58 · 390 阅读 · 0 评论 -
【DP】最长上升子序列
比如某时刻可能存在 3 2 1和3 2 2 2 2 1的数组。lower_bound(x)寻找第一个大于等于x的位置,找不到返回数组的尾部元素位置+1的位置。upper_bound(x) 寻找第一个大于x的位置,找不到返回数组的尾部元素位置+1的位置。这个洛谷题目注意,第一次找最长 非严格下降子序列,第二次找 最长 严格上升子序列。还有一个注意的地方。寻找最长严格下降子序列和寻找最长非严格下降子序列的区别。在降序序列上,upper_bound是第一个小于x的位置。扫描到300的时候 更新207为300。原创 2022-12-26 20:02:31 · 409 阅读 · 0 评论 -
【DP+拓扑】最大食物链计数
很容易想到拓扑排序后整个图变得有层级,到达点A的路径数等于A的前驱的路径数的和。即cnt[A]+=∑cnt[A的前驱节点] 所以都统计出来之后,最后扫一遍出度为0(终点)的cnt加起来就是答案。不断取出队头,从队头枚举后继,把后继的入度减一,如果后继的入度减为0了,那么直接把它入队。题意:给一张有向图。图保证无环,且存在若干个起点(入度为0)和若干终点(出度为0) 求起点到终点的路径数量。拓扑排序保证了DP无后效性。操作一个入度为0的节点的后继,保证了操作完后,该点不会再对后继有任何贡献。原创 2022-12-26 11:46:22 · 120 阅读 · 0 评论