随笔分类 -  dp

摘要:求区间[l,r]内有多少个数的满足: 选一个位为中点,是的左边的数到该位的距离等于右边的位到该位的距离。 比如4139 选择3位中点, 那么左边的距离是 4 * 2 + 1 * 1 , 右边的距离是9 * 1想了半天,想到了枚举哪一位作为中点, 然后进行数位dp, 但是样例错了, 忽然想到会重复... 阅读全文
posted @ 2015-11-05 20:36 justPassBy 阅读(347) 评论(0) 推荐(0)
摘要:行李箱上的密码锁大家都知道, 现在给我们长度为n(n3个字符1格,问最少多少次可以使得第一个串变成第二个串经历了搜索,贪心,的思路后,最终想到了动态规划。因为第一个字符如果不在位,那么肯定是要处理的,否则那么相当于子问题。所以定义dp[i][k1][k2]为第i个字符在位时,第i+1个字符向上走了k... 阅读全文
posted @ 2015-10-27 21:51 justPassBy 阅读(148) 评论(0) 推荐(0)
摘要:每天在一个n*m的棋盘上放棋子,问使得每一行,每一列都有棋子的期望天数dp[n][m][k] 表示用k个棋子占据了n行,m列,距离目标状态还需要的期望天数那么dp[n][m][k] = p1 * dp[n][m][k+1] + p2*dp[n+1][m][k+1] + p3*dp[n][m+1][k... 阅读全文
posted @ 2015-09-10 13:54 justPassBy 阅读(160) 评论(0) 推荐(0)
摘要:hdu1506的加强版, 如果要做这题,还是先去做1505吧这一题,其实是对每一行做1505的那种dp,然后取最大值就行了。 1 #pragma warning(disable:4996) 2 #pragma comment(linker, "/STACK:1024000000,1024000000... 阅读全文
posted @ 2015-09-05 15:33 justPassBy 阅读(281) 评论(0) 推荐(0)
摘要:可以算出以第i个值为高度的矩形可以向左延伸left[i],向右延伸right[i]的长度那么答案便是 (left[i] + right[i] + 1) * a[i] 的最大值关键left[i] 和right[i]的计算如果a[i] > a[i-1] , 那么left[i] = 0如果a[i] 4 ... 阅读全文
posted @ 2015-09-05 15:20 justPassBy 阅读(267) 评论(0) 推荐(0)
摘要:从n根筷子里面, 选择k+8个集合的筷子,每个集合三根筷子, A#include #include #include #include #include #include #include #include #include #include #include #include #include #... 阅读全文
posted @ 2015-09-05 10:36 justPassBy 阅读(344) 评论(0) 推荐(0)
摘要:给定一个字符串,问最少添加多少个字符可以使得这个字符串变成回文串if(str[i]==str[j]) dp[i][j] = dp[i+1][j-1]else dp[i][j] = min(dp[i][j-1],dp[i+1][j]);可以看出,dp[i][j] 要么是从dp[i+1][] 这个状态转... 阅读全文
posted @ 2015-09-05 10:02 justPassBy 阅读(226) 评论(0) 推荐(0)
摘要:给一棵树,边上有权值,然后给一个权值x,问从根结点出发, 走不超过x的距离,最多能经过多少个结点。走过的点可以重复走,所以可以从一个分支走下去,然后走回来,然后再走另一个分支dp[u][j][0] 表示从u出发,走了j个点,然后不回到u点的最小花费dp[u][j][1] 表示从u出发,走了j个点,然... 阅读全文
posted @ 2015-09-05 09:28 justPassBy 阅读(193) 评论(0) 推荐(0)
摘要:一般的期望dp是, dp[i] = dp[j] * p[j] + 1; 即走到下一步需要1的时间,然后加上 下一步走到目标的期望*这一步走到下一步的概率这一题,我们将联通分块缩为一个点,因为联通块都是安全的dp[u][s] 为当前在u,走过的联通块为s的期望天数那么走到剩下没有走过的连通块的概率是 ... 阅读全文
posted @ 2015-09-03 10:15 justPassBy 阅读(192) 评论(0) 推荐(0)
摘要:这题我有闪过是用单调队列优化的想法,也想过有左右两边各烧一遍。 但是不敢确定,搜了题解,发现真的是用单调队列,然后写了好久,调了好久下标应该怎么变化才过的。dp[i][j] 表示走到第i行,第j个竖线的最大价值。dp[i][j] = max(dp[i-1][k]+pre[i][j-1]-pre[i]... 阅读全文
posted @ 2015-08-31 21:49 justPassBy 阅读(232) 评论(0) 推荐(0)
摘要:n头狼排成一列,每头狼有两个属性,基础攻击力和附加攻击力,第i只狼的基础攻击力是ai,附加攻击力是b(i-1) + b(i+1)消灭一只狼,受到的伤害为基础攻击力+附加攻击力。问消灭所有的狼受到的最小伤害。基础攻击力的伤害肯定是要承受的。关键是怎么将附加攻击力的伤害降低到最小像这种不能从前往后状态转... 阅读全文
posted @ 2015-08-28 09:05 justPassBy 阅读(221) 评论(0) 推荐(0)
摘要:求从1点出发,走遍所有的点,然后回到1点的最小代价。每个点可以走若干遍。如果每个点只能走一遍,那么设dp[i][s]为走完s状态个点(s是状态压缩),现在位于i的最小花费。然后枚举从哪个点回到原点即可。但是现在每个点不止走一次,那么状态就不好表示了,但是,我们可以用floyd处理出任意两点的最短距离... 阅读全文
posted @ 2015-08-22 20:50 justPassBy 阅读(226) 评论(0) 推荐(0)
摘要:给定一个数字d,随机选择一个d的约数,然后让d除以这个约数,形成新的d,不断继续这个步骤,知道d=1为止,要我们求将d变为1的期望次数设d1,d2...dj是除以约数后,形成的行的d,且dj==d那么dp[i] = 1/j*dp[d1] + 1/j*dp[d2]+...+1/j*dp[dj] + 1... 阅读全文
posted @ 2015-08-20 19:51 justPassBy 阅读(164) 评论(0) 推荐(0)
摘要:有n个格子,初始的时候pos=1,然后丢骰子,然后新的pos为pos+骰子的点数,走到新的pos,可以捡走该pos上的黄金。特殊的是,如果新的pos超过了n,那么是不会走的,要重新丢骰子。所以要分当前的位置丢骰子后是不是会超过n来考虑以第三个样例解释dp[3] = 9dp[2] = 1/6*dp[3... 阅读全文
posted @ 2015-08-20 10:47 justPassBy 阅读(219) 评论(0) 推荐(0)
摘要:有一个迷宫,有n个门,走每个的概率都是相同的每个门有一个数字,如果是正数ai,那么表示走ai天就能走出迷宫,如果是负数,那么走-ai天会回到原地,然后会忘记之前的事情,继续选择门去走所以,如果都是负数,那么是不可能走出迷宫的设d为走出迷宫的期望天数那么第三个样例就是 d = 1/3*3+1/3*(6... 阅读全文
posted @ 2015-08-20 10:13 justPassBy 阅读(216) 评论(0) 推荐(0)
摘要:hdu3480给定一个有n个数的集合,将这个集合分成m个子集,要求子集的并等于全集求花费最小。花费为该子集的(最大数-最小数)的平方。我们将n个数排序,a 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include ... 阅读全文
posted @ 2015-08-19 10:05 justPassBy 阅读(222) 评论(0) 推荐(0)
摘要:给定n类等级的珍珠每类的珍珠都有需求的个数ai,和价格pi为了防止游客只买1颗珍珠,所以购买ai个珍珠时,要加上10个的价格即(ai+10)*pi有时,购买高等级的珍珠代替低等级的珍珠时,可能更便宜,比如说25 5100 10 这样的数据(5+10)*5 + (100+10)*100 = 1175(... 阅读全文
posted @ 2015-08-14 16:07 justPassBy 阅读(212) 评论(0) 推荐(0)
摘要:可以用队列优化或斜率优化的dp这一类的问题为 1D/1D一类问题 即状态数是O(n),决策数也是O(n) 单调队列优化 我们来看这样一个问题:一个含有n项的数列(n<=2000000),求出每一项前面的第m个数到它这个区间内的最小值 可以使用RMQ求区间最小值,那么时间复杂度是O(nlogn),不是 阅读全文
posted @ 2015-08-10 20:56 justPassBy 阅读(427) 评论(0) 推荐(0)
摘要:hdu4734给定 a和b,问区间[0,b]内有多少个数字的f(i) 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #inc... 阅读全文
posted @ 2015-08-09 17:38 justPassBy 阅读(253) 评论(0) 推荐(0)
摘要:数位dp其实就是给你一个 很大的区间,[1,2^63-1], 求区间内满足某个性质的数字有多少个。这个性质可以千变万化,比如区间内有多少个数字含有数字49,区间内有多少个数的2进制表示0的个数比1多, 等等。一般是用记忆化搜索来做数位dp,然后在dp里枚举每一位,枚举该位后,计算出选择该位之后对要求... 阅读全文
posted @ 2015-08-09 17:34 justPassBy 阅读(175) 评论(0) 推荐(0)