随笔分类 -  动态规划

摘要:https://codeforces.com/contest/1132/problem/F 借鉴:https://www.cnblogs.com/chhokmah/p/10508762.html 题意 给你一个串s,每次可以花费1的代价删去一个子串,要求子串的每一位为同一个字符。求删去整个串的最小代 阅读全文
posted @ 2019-04-07 20:42 shuai_hui 阅读(381) 评论(0) 推荐(0)
摘要:描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度)。例如(1,5)可以嵌套在(6,2)内,但不能嵌套在(3,4)中。你的任务是选出尽可能多的矩形排成一行,使得除最后一个外,每一个矩形都可 阅读全文
posted @ 2019-03-16 22:26 shuai_hui 阅读(232) 评论(0) 推荐(0)
摘要:题意:连续的几个颜色相同的格子称为一个连通块。选一个点为起点,每个操作是把所在连通块变一个颜色,求把整个区间染成同色需要的最少操作数。(注意,每次只能改变所在连通块的颜色,不能任选连通块,除了最开始时) 题解: 对于区间[L,R],最优的方案要么是全变成L处的颜色,要么全变成R处的颜色 因为可以看作 阅读全文
posted @ 2019-02-18 21:07 shuai_hui 阅读(231) 评论(0) 推荐(0)
摘要:题目意思: 给长度为n(n<=2000)的数字串,数字只能为1或者2,可以将其中一段区间[l,r]翻转,求翻转后的最长非递减子序列长度。 题解:求出1的前缀和,2的后缀和,以及区间[i,j]的最长不递增子序列。 f[i][j][0]表示区间i-j以1结尾的最长不递增子序列; f[i][j][1]表示 阅读全文
posted @ 2019-02-01 14:07 shuai_hui 阅读(136) 评论(0) 推荐(0)
摘要:题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 阅读全文
posted @ 2019-01-30 18:31 shuai_hui 阅读(359) 评论(0) 推荐(0)
摘要:题目大意:: 为给你n个点(n<=10,nn<=10,n) 初始时没有边相连 然后有m个操作(m<=30000m<=30000) 每次可以添加一条边或删除一条边 允许有重边 要求每次操作过后输出选这个图中不相交的k条边有多少种不同的方案 (k=1,2,3……n/2) 题目分析: n最大只有10 , 阅读全文
posted @ 2019-01-25 17:40 shuai_hui 阅读(265) 评论(0) 推荐(0)
摘要:题目意思: 给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大。输出最大的值。 题目分析: 首先如果你可以熟悉的使用树形dp的话 , 可以很快的意识的先从1号点开始dfs一遍,然后通过一些奇 阅读全文
posted @ 2018-12-23 15:07 shuai_hui 阅读(267) 评论(0) 推荐(0)
摘要:题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当前的状态 st | (1<<x) , 表示这个数字出现了 , 那st的二进制有多少的1 , 就有多少 阅读全文
posted @ 2018-11-16 09:54 shuai_hui 阅读(910) 评论(0) 推荐(0)
摘要:题目:找出区间[A, B]内所有数字的奇数字位出现次数为偶数,偶数字位出现次数为计数的数的个数。 分析:这道题的状态同样不好取,因为要求每一个奇数的个数都要为偶数,每一个偶数的位数都要为奇数,又因为只有10个数(0~9),又因为没个数只有3种状态,分别是没有(0),奇数个(1),偶数个(2),这样我 阅读全文
posted @ 2018-11-10 11:22 shuai_hui 阅读(592) 评论(0) 推荐(0)
摘要:题目:求1~n的范围里含有13且能被13整除的数字的个数。 分析: dfs(len, num, mod, flag) mod记录数字对13取余后的值 len表示当前位数 num==0 不含13且上一位不为1 pre==1 不含13且上一位为1 pre==2 含13 flag表示是否可以任意取值(判断 阅读全文
posted @ 2018-11-08 20:48 shuai_hui 阅读(266) 评论(0) 推荐(0)
摘要:题目:区间的数里面有49的个数 分析: dp[pos][0]:长度为pos的数中,不包含49的,前一位不为4的有多少个;dp[pos][1]:长度为pos的数中,不包含49的,前一位为4的有多少个;dp[pos][2]:长度为pos的数中,包含49的有多少个; 一开始我是打算先算不满足的,在算满足的 阅读全文
posted @ 2018-11-08 16:50 shuai_hui 阅读(223) 评论(0) 推荐(0)
摘要:题目:区间的有多少个数字满足数字的每一位上的数组成的最长递增子序列为K 思路:用dp[i][state][j]表示到第i位状态为state,最长上升序列的长度为k的方案数。那么只要模拟nlogn写法的最长上升子序列的求法就行了。这里这里记忆化的时候一定要写成dp[pos][stata][k],表示前 阅读全文
posted @ 2018-11-08 16:04 shuai_hui 阅读(280) 评论(0) 推荐(0)
摘要:题意:数字满足的条件是该数字可以被它的每一位非零位整除。 分析:大概的思路我是可以想到的 , 但没有想到原来可以这样极限的化简 , 在数位dp 的道路上还很长呀 ; 我们都知道数位dp 的套路 , 核心的部分就是找到判断这个数的满足条件的方法 , 如果找到了那这个问题就迎刃而解了吧 ; 这个题的条件 阅读全文
posted @ 2018-11-08 15:13 shuai_hui 阅读(272) 评论(0) 推荐(0)
摘要:题意:求区间[l,r]内所有与7无关的数的平方和(取模)定义与7无关的数: 1.数字的数位上不能有7 2.数字的数位和不能是7的倍数 3.数字本身不能是7的倍数分析:状态的保存:1.数位上不能有7: 只需枚举数位的数字的时候跳过7就好 if (i == 7) continue;2.数位和不能是7的倍 阅读全文
posted @ 2018-11-07 23:51 shuai_hui 阅读(263) 评论(0) 推荐(0)
摘要:平衡数的定义是指,以某位作为支点,此位的左面(数字 * 距离)之和 与右边相等,距离是指某位到支点的距离; 题意:求区间内满足平衡数的数量 ; 分析:很好这又是常见的数位dp , 不过不同的是我们这次需要枚举是哪个位置是平衡点 , 一开始我是想说搜索到最后以为 ,然后得到这个数的位数 ,在判断平衡位 阅读全文
posted @ 2018-11-06 23:17 shuai_hui 阅读(219) 评论(0) 推荐(0)
摘要:题意:求区间内二进制中0的数量要不能少于1的数量 分析:很明显的是数位DP; 菜鸟me : 整体上是和数位dp模板差不多的 , 需要注意的是这里有前导零的影响 , 所以需要在dfs()里面增加zor 变量的限制条件 , 那么我们的dp[i][j] 是表示第i 位置 , ,0的数量减去1的数量不少于 阅读全文
posted @ 2018-11-06 22:28 shuai_hui 阅读(301) 评论(0) 推荐(0)
摘要:题目给了个f(x)的定义:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足f(i)<=f(a)的i的个数。 常规想:这个f(x)计算就和数位计算是一样的,就是加了权值,所以dp[pos 阅读全文
posted @ 2018-11-05 18:50 shuai_hui 阅读(150) 评论(0) 推荐(0)
摘要:推荐博客 推荐博客 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦!之所以要引入数位的概念完全就是为了dp。数位 阅读全文
posted @ 2018-11-05 18:22 shuai_hui 阅读(268) 评论(0) 推荐(0)
摘要:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5860 题目大意:给你n个人排成一列编号,每次杀第一个人第i×k+1个人一直杀到没的杀。然后剩下的人重新编号从1~剩余的人数。按照上面的方式杀。问第几次杀的是谁。 分析 一轮过后和原来问题比只 阅读全文
posted @ 2018-10-16 21:34 shuai_hui 阅读(106) 评论(0) 推荐(0)
摘要:#include <fstream> #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> using namespace std; const int N=205; 阅读全文
posted @ 2018-10-09 18:29 shuai_hui 阅读(248) 评论(0) 推荐(0)