动态规划
lpc大菜逼
这个作者很懒,什么都没留下…
展开
-
P1133 教主的花园
题目描述教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值。教主最喜欢333种树,这3种树的高度分别为10,20,3010,20,3010,20,30。教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高。输入输出格式接下来nnn行,每行333个不超过100001000010000的正整数ai,原创 2020-11-20 20:13:41 · 245 阅读 · 1 评论 -
P1594 护卫队
题目:题目坐标:护卫队.护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。被分在同一组的每一辆车都以其最快的速度通过该桥。一组车队通过该桥的时间是用该车队中速度原创 2020-11-19 21:24:41 · 157 阅读 · 0 评论 -
最大回文串(palindrome.cpp)题解(回文串输出路径)施工中
题目:每次考试,奶牛都想作弊,而且他又找回了一些朋友,于是他就试一下作弊的滋味了。他是怎么作弊的呢?奶牛的朋友太强悍了,他生怕被老师发现,又害怕被其他同学偷去,于是他每次递给奶牛都是一段只含有a,b,c,da, b, c, da,b,c,d的字符串,那么答案是什么呢?“答案就是该字符串内最长的回文串。”哈哈哈,奶牛瞬间就发现了这个秘密,可是,奶牛的朋友是个**狂,他每次递给奶牛的都是一些非常长的字符串,奶牛在短时间内没发找到答案,所以奶牛又找到了你,帮他找出字符串内最大的回文串。回文串: 从左往右写和从原创 2020-08-03 09:56:39 · 243 阅读 · 0 评论 -
括号涂色题解(区间DP)
题目:Petya遇到了一个关于括号序列的问题: 给定一个字符串S,它代表着正确的括号序列,即(“(”)与 (“)”)是匹配的。例如:“(())()” 和 “()”是正确的,“)()”与“(()”则不是正确的。 在正确的括号序列中,一个左边的括号一定是匹配一个右边的括号(反之亦然)。例如,在下图中,第 3 个括号匹配第 6 个括号,第 4 个括号匹配第 5 个括号。现在你需要对一个正确的括号序列做涂色操作,严格满足以下三个条件:1、每个括号要么不涂色,要么涂红色,要么涂蓝色。2、一对匹配的括号需要且原创 2020-07-19 23:38:34 · 325 阅读 · 0 评论 -
分离与合体题解(区间DP)
题目:经过在机房里数日的切磁,LYD从社神牛那里学会了分离与合体,出关前,杜神牛给了他一个测试杜神牛造了个区域,它们紧邻着排成了一行,编号1-n。在这經个区域里都放着一把OI界的金钥匙,每一把都有一定的价值,LYD当然想得到它们了。然而杜神牛规定LYD不可以一下子把它们全部拿走,而是每次只可以拿一把。为了尽快地拿到所有的金钥匙,LYD自然就用上了刚学的分离与合体特技。开始LYD可以选择从1~n-11~n-11~n-1的任何一个区域(记为K)进入,进入后LYD会在K区域发生分离,从而分离为两个小L原创 2020-07-19 21:03:49 · 222 阅读 · 0 评论 -
能量项链【题解】(区间DP)
思路:其实这应该是“石子合并2”的升级版,首先我们要按照题目的说法,把n个数变为(N1,N2)(N2,N3)(N3, N4)(N4, N5)…(Nn, N1)。这里推荐读者用结构体来保存每一组的数,之后简单分析一下题目,这题应该是可以环状相加的,所以再用二倍链的方式解决。状态:dp[i][j]表示合并i——j的最大开销转移方程:(i为左端点)dp[i][r] = max(dp[i][r], dp[i][k] + dp[k + 1][r] + b[i].x * b[k].y * b[r].y);原创 2020-07-18 23:41:36 · 134 阅读 · 0 评论 -
绝世好题题解
我太难了:今天gm讲了“绝世好题”。但神奇的事发生了,我的代码是按照郭老师的想法打的但是没A,最后发现错在了一个很珂学的地方。1.状态:dp[i][j]表示以第i个数结尾,在第i个数二进制表示下的第j位,的最长长度(好绕啊!!!)2.状态转移方程:1):ansx表示此时以第i个数结尾的最长长度2):ansx = max(ansx, dp[j] + 1);//此时j一定要满足x & (1 << j)其意义为第i个数第j位为1。3.原理:因为题目要求是让相邻的数 ‘&原创 2020-06-24 13:09:31 · 326 阅读 · 2 评论 -
石子合并题解1
分析:首先我们可以发现这跟以往的线性DP不同,从每一步的点到点成了两条线的转移,所以在与以往的思考上有很大不同,首先若i,j两堆可以合并那么i~j之间的所有石子都以合并,即i,j合并与i至k,和k+1至i有关。状态:dp[i][j]表示左端点为i,右端点为j的区间合并花费最小值。状态转移方程:dp[r][j] = min(dp[r][j], dp[r][k] + dp[k + 1][j]) + r~j石子合并花费实现:首先一个循环枚举长度,在一个枚举右端点,左端点 = 长度 + 右端点 - 1原创 2020-06-23 22:27:48 · 164 阅读 · 0 评论 -
挂饰题解
题目:OI君有N个装在手机上的挂饰,编号为1…N。 JOI君可以将其中的一些装在手机上。JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩。每个挂件要么直接挂在手机上,要么挂在其他挂件的挂钩上。直接挂在手机上的挂件最多有1个。此外,每个挂件有一个安装时会获得的喜悦值,用一个整数来表示。如果JOI君很讨厌某个挂饰,那么这个挂饰的喜悦值就是一个负数。JOI君想要最大化所有挂饰的喜悦值之和。注意不必要将所有的挂钩都挂上挂饰,而且一个都不挂也是可以的。分析:1.状态:dp[i][j原创 2020-06-20 21:03:38 · 315 阅读 · 0 评论 -
种树的艺术题解
种树的艺术题解分析:1.状态:通过读题我们不难得出状态:dp[i][j][k]表示i个树左边看有j个右边看有k个(我也只想出了这个)2.状态转移方程:假设把最小的一个树(应为假设最小的一棵树方便分析,若假设其他的会有奇奇怪怪的事情)放在最左边则是前i - 1棵树左边看到j - 1右边看到k棵的方案同理若放在最右边则是前i - 1棵树左边看到j右边看到k - 1棵的方案最后若放在中间则可以随便放所以是dp[i - 1][j - 1][k] * (i - 2)3.代码:#include <原创 2020-06-19 20:38:20 · 197 阅读 · 0 评论