随笔分类 -  DP

摘要:题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完之后会随机跳出来一个。取到每个小鼠的概率是一样的,跳出的也是一样的。先取到白色的小鼠赢,问最后pri 阅读全文
posted @ 2016-05-21 11:41 Howe_Young 阅读(694) 评论(0) 推荐(1)
摘要:题意:有30001个岛,在一条线上,从左到右编号一次为0到30000。某些岛屿上有些宝石。初始的时候有个人在岛屿0,他将跳到岛屿d,他跳跃的距离为d。如果当前他跳跃的距离为L,他下一次跳跃的距离只能为L-1,L,L+1之一且不能为0。他只能往编号更大的岛跳,直到他不能跳,问他最多能收集多少个宝石? 阅读全文
posted @ 2016-05-18 15:27 Howe_Young 阅读(421) 评论(0) 推荐(0)
摘要:题意:给定n个菜,每个菜都有一个价值,给定k个规则,每个规则描述吃菜的顺序:i j w,按照先吃i接着吃j,可以多增加w的价值。问如果吃m个菜,最大价值是多大。其中n<=18 思路:一看n这么小,除了暴力之外就得想想状态压缩dp了。因为每种菜正好两种状态(吃过与没吃过),正好可以使用二进制来表示每种 阅读全文
posted @ 2016-05-06 14:41 Howe_Young 阅读(498) 评论(0) 推荐(0)
摘要:可以用三维dp来保存状态,dp[i][j][k]表示在前i个字符变换了j步之后方向为k(k = 1 or k = 0)的最优解,也就是离原点的最大距离。这里规定0方向为正方向,1位负方向,表示的是当前这个人朝哪个方向。这两个方向是对立的。所以就可以递推一个关系式,分第i个字符为'F'or'T'时如果... 阅读全文
posted @ 2015-12-30 20:36 Howe_Young 阅读(607) 评论(1) 推荐(0)
摘要:之前求过LIS和LCS,这次求两者的综合问题。那么就需要用到这两个问题的思想。首先,用dp[i][j]表示str1和str2分别以i和j结尾的LCIS,那么对于str1[i] == str2[j]的时候,就要在1~j-1之间找到最优解,就是满足条件dp当中最大的一个,这个就是LIS的思想。如果不等的... 阅读全文
posted @ 2015-12-28 15:05 Howe_Young 阅读(1016) 评论(0) 推荐(0)
摘要:动态规划题:dp[i][j]表示有i个Cake,给了Alice j个,先按照b排序,这样的话,能保证每次都能成功给Alice Cake,因为b从大到小排序,所以Alice选了j个之后,Bob最少选了j个,所以i>=2*j, 并且每次Alice选的时候Bob已经选过了。所以当i>=2 * j的时候Al... 阅读全文
posted @ 2015-11-04 09:39 Howe_Young 阅读(238) 评论(0) 推荐(0)
摘要:题意:给定一个序列,找出长度为m的严格递增序列的个数。思路:用dp[i][j]表示长度为i的序列以下标j结尾的总个数。三层for循环肯定超时,首先离散化,离散化之后就可以用树状数组来优化,快速查找下边在j之前,值比ary[j]小且长度为i-1 的个数#include #include #includ... 阅读全文
posted @ 2015-10-27 09:15 Howe_Young 阅读(281) 评论(0) 推荐(0)
摘要:题意:给定一个序列ai,个数为n。再给出一系列w;对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数。思路:动态规划,用dp[w]表示当前长度为w的时候的权值和。显然dp[1] = n; 如果求dp[2]的话,那么它可以由dp[1]推出来,首先它比dp[1]少了最后... 阅读全文
posted @ 2015-10-23 10:55 Howe_Young 阅读(517) 评论(0) 推荐(0)