随笔分类 - dp
摘要:题意: 给一个序列$a$,对于每一位$a[i]$,要求满足$a[i]<=a[i-1]$或者$a[i]<=a[i+1]$,如果$a[i]=-1$,则表示该位未知,问最多有多少种序列可以满足条件。 思路: $dp[i][j][k]$表示第$i$位填充$j$的时候与前一位的关系是$k$。 $k=0$表示$
阅读全文
摘要:题意: 给出一个序列$a[n]$和数字$x$,你可以选择任意一个区间把区间中的每个数乘上$x$。 问区间和的最大值是多少。 思路: $dp[i][0]$表示第i位在更新区间的前面,$dp[i][1]$表示在更新区间中,$dp[i][2]$表示在更新区间的后面。转移为: $dp[i][0]=max(0
阅读全文
摘要:题意: 给出一棵树,选一个节点作为根,使得所有子树的和最大,输出最大值。 思路: 换根$DP$。 代码: 1 //#include<bits/stdc++.h> 2 #include <set> 3 #include <map> 4 #include <stack> 5 #include <cmat
阅读全文
摘要:题意: 给一棵树,问有多少条边的长度大于$K$。 思路: 对于一个点$x$,处理出所有其他点到它的距离,$n^2$找出经过它的所有长度加起来大于$K$的点对的数量。 但是找到的这些点对中存在不经过点$x$的点对,则减去这些点对的数量,若$v$是$x$的子节点,$w$是$v$到$x$的距离,则减去距离
阅读全文
摘要:题意: 给一张有向图,可以把$k$条边的边权变成$0$,求点$1$到$n$的最短路。 思路: $dp$+$dijkstra$思想。 $dis[i][k]$表示点$1$到$i$实行了$k$次把边权变为$0$的操作之后的最短距离。转移为: $dis[v][k]=min(dis[v][k],dis[u][
阅读全文
摘要:题意: 给定合法括号序列,可以给括号涂三种颜色:红色,蓝色,不上色。涂色需要满足以下两个要求: ①匹配括号必须一个上色一个不上色。 ②相邻括号不能上同一种颜色,但可以同时不上色。 求上色方案数。 思路: $dp[i][j][k][l]$表示区间$(i,j)$中$i$上颜色$k$,$j$上颜色$l$的
阅读全文
摘要:题意: $n$张卡片,每张卡片有4个属性$w,x,isMagic,isSpellBoost$分别表示花费,伤害,是否为魔法卡,是否为作用卡。如果使用一张魔法卡,可以使所有未使用的作用卡的费用减$1$,已知有$W$的钱,求造成的最大伤害。 思路: $dp[i][j]$表示使用了$i$张魔法卡,花费$j
阅读全文
摘要:题意: 给一个小写字母组成的串,问长度为$K$的不重复的子序列有多少个。 思路: $dp[i][j]$表示长度为$i$的最后一位为$j$的子序列的个数。 转移方程为:$dp[i][j]=\sum_{k=0}^{25}{dp[i-1][k]}$。 特判$K=0$时个数为$1$。 代码: 1 #incl
阅读全文
摘要:题意: 给定整数$c$和数组$a$,$b$。$a_i$表示通过爬楼梯的方法从第$i$层到$i+1$层需要的时间,$b_i$表示通过坐电梯的方法从第$i$层到$i+1$层需要的时间,坐电梯前需要等$c$单位时间,求从第一层到各层的时间。 思路: $dp[i]=min\left\lbrace\ dp[j
阅读全文

浙公网安备 33010602011771号