随笔分类 - 2****动态规划DP
[Codeforces375E]Red and Black Tree
摘要:Problem 给定一棵有边权的树。树上每个点是黑或白的。黑白点能两两交换。 求符合任意一个白点到最近黑点的距离小于等于x时,黑白点交换次数最少为多少。 Solution 明显是一题树形DP。我们先跑一边Floyd。 F[i][j][k]表示以i为根的子树中,连向结点j,子树中已经确定有k个是黑点所
阅读全文
[Codeforces178F2]Representative Sampling
摘要:Problem 给定n个字符串Si,任意选出k个字符串Ai,使得其中任意两个字符串lcp之和最大。 Solution 建一棵trie树,枚举每一个节点对答案的贡献,树形dp,时间复杂度像是O(N^3) 由于每个点对只在自己LCA的时候枚举到贡献,所以是O(N^2) Notice 这道题分析时间复杂度
阅读全文
[BZOJ1596]电话网络
摘要:Problem 给你一棵树,可以在每个点上选择造塔或不造,每座塔可以覆盖这个节点和相邻节点,问覆盖整棵树的最小塔数。 Solution 看到这道题的第一眼,我就觉得是一题贪心题,但看见出题的时候分类在树形DP,于是就没仔细想贪心。 树形DP:f[u][0]表示u被其儿子覆盖,f[u][1]表示u上有
阅读全文
[BZOJ3167]Sao
摘要:Problem 给你n个任务,n 1个关系,ab代表a在b前或者a在b后 问你有几种拓扑序 Solution f[i][j]表示第i个节点前有j个节点的方案数 设当前节点为x,儿子节点为s,若x依赖于s,那么 若s依赖于x,那么 Notice 要预处理出C数组 Code
阅读全文
[Codeforces543D]Road Improvement
摘要:Problem 刚开始每条边都是坏的,现在要选取一个点使得其他点到这个点的路径上最多只有一条坏路,问至少要修好多少条边 Solution 如果以1为根,那么是个简单的树形DP 设根从u转移到v,那么u的父亲会变成v(f[u]需要删除v的贡献), u的原来的父亲会变成u的孩子(f[u]需要加上原父亲的
阅读全文
[ZH模拟赛20171031T2]Bubble
摘要:Problem 让你求出LIS的长度,并且求出不同的LIS序列的交集(即必须被包含在LIS中的点) Solution 我们求出正的LIS和倒着的,如果一个位置上,第一次的f值+f值减掉1(本身算了2次)等于LIS的长度,那么这个位置存在于LIS中 我们再对f[i]hash一下,如果只有1次,那么这个
阅读全文
[CodeChef-CAPTCITI]Snakes capturing the Mongoose Cities
摘要:Problem 每个点都可以选择降落士兵,然后当一个点的子节点被攻占的数量超过读入中的限制后,这个城市也被占领。 每个点降落士兵都有一定的代价,问把这一个图全部攻占的最小代价。 Solution 这显然和儿子有关还与父亲有关 我们假设f[x]表示x在父亲之前被攻占,g[x]表示x再父亲之后被攻占 显
阅读全文
[BZOJ2427]软件安装
摘要:Problem 每个软件都要安装某些软件才能安装,而且都有体积和价值,求安装的价值最大值 Solution 对于每个环,我们可以知道必须全部一起取或者不取,因此我们先用Tarjan缩点 然后我们用一个树形DP就可以解决了 Notice 注意这颗树是如果一个节点没取,后面就都不能取了 Code
阅读全文
[Codeforces771E]Bear and Rectangle Strips
摘要:Problem 给你一个2 n的矩阵,要求你用补充叠的矩阵去框,要求每个矩阵框中的数之和为0,问最多可以用几个矩阵。 Solution 首先预处理出一个点到离它最近的一段和为0的区间的左端点 然后到这往前用记忆化搜索的方式DP就可以了 Notice 注意要记忆化 Code
阅读全文
[HDU6146]Pokémon GO
摘要:Problem 有一个2 n的方格矩阵 在一个格子上可以往旁边8个方向走(如果有格子),求有多少方案把2 n走完 Solution 我们用Fi表示从一个角出发走遍所有格子回到这一列另外一点的方案数 显然,F1 = 1,Fn = 2 Fn 1 = 2^(n 1) 我们再用Gi表示从一个角出发,走遍所有
阅读全文
[Codeforces613E]Puzzle Lover
摘要:Problem 给你2 n的格子,每个格子有一个字母,从任意一点出发,不重复的经过上下左右,生成要求的字符串。问有几种不同的走法。 Solution 分三段,左U型、中间、右U型。 分别枚举左边和右边的长度,中间一段用Dp来解决。 Dp[i][j][k],i,j,k表示当前在(i,j)位置,枚举到第
阅读全文
[Codeforces778E]Selling Numbers
摘要:Problem 给一个由问号和数字组成的数字串A(问号表示任一数字)。 再给定n个数字Bi,和0~9的数字的价值。 F(x)表示x各个位数上的价值和。问A为何值时,sum(F(Bi+A))的值最大为多少。 1 ≤ A,Bi include include include include using
阅读全文
[Codeforces477D]Dreamoon and Binary
摘要:Problem 给定一个字符串数的二进制表示(不含前导0)s(长度不超过5000), 对于一个数n(初值为0),可以进行以下两种操作: 1.将n的二进制表示(无前导0)写到已经写的串的后面. 2.n加上1. 问组成s的不同方法数以及最少用多少次操作能组成串s. Solution 对于第一问: 用f[
阅读全文
[Codeforces440D]Berland Federalization
摘要:Problem 给你一棵树,最少删掉哪些边,能使得余下的至少有1个大小刚好为k的残树。 1 ≤ k ≤ n ≤ 400 Solution 用f[i][j]表示以i为根有j个节点的最少删边数量 因为此题要输出删除的边 v[i][j]表示以i为根删掉j个节点需要删去的边对应的(点u,该u点还需要删去的边
阅读全文
[Codeforces441E]Valera and Number
摘要:Problem 给定一个数x,有p%的概率乘2,有1 p%的概率加1,问操作k次,其二进制数下末尾零的个数的期望。 Solution 每次操作只会影响到最后的8位 我们用dp[i][j]表示i个操作后,后面的操作还需要加j 对于+1的操作:dp[i][j 1]+=dp[i 1][j] (1 p) 对
阅读全文
[Codeforces708E]Student's Camp
摘要:Problem 一个n m块砖的建筑,一共k天,每天风从两边吹,吹掉砖的概率为p,反之为1 p,求最终建筑没有倒塌的可能性(上层与下层有交集且每一层都有砖) Solution 首先,我们可以预处理出pl[]和pr[]数组,表示k天后左右两边风吹到的位置的可能性 然后我们可以枚举层数,当前这一层的左右
阅读全文
[Codeforces797F]Mice and Holes
摘要:Problem n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离。 Solution 用dp[i][j]表示前i个洞,进了前j个老鼠的最小代价 dp[i][j]=min(dp[i 1][k]+Sum[j] Sum[k])(其中Sum[x]表示前x个老鼠到当前第i个洞的距离总和)
阅读全文
[Codeforces721E]Road to Home
摘要:Problem 有一条长为l的公路(可看为数轴),n盏路灯,每盏路灯有照射区间且互不重叠。 有个人要走过这条公路,他只敢在路灯照射的地方唱歌,固定走p唱完一首歌,歌曲必须连续唱否则就要至少走t才能继续唱。 问最多能唱多少首歌 Solution 贪心:对于一段照射区间要么不唱歌要么能唱多久唱多久 提早
阅读全文
[Codeforces513E2]Subarray Cuts
摘要:Problem 给定一个长度为n的数字串,从中选取k个不重叠的子串(可以少选),将每个串求和si 求max|s1 s2| + |s2 s3| + ... + |sk 1 sk|(n include include include include using namespace std; define
阅读全文
浙公网安备 33010602011771号