什么是动态规划算法?动态规划算法其实质就是分治思想和解决冗余。因此它与分治法和贪心法类似,都是将待求解问题分解为更小的,相同的子问题,然后对子问题进行求解,最终产生一个整体最优解。适合采用动态规划法求解的问题,经分解得到的各个子问题往往不是相互独立的。在求..
分类:
编程语言 时间:
2016-09-01 00:30:41
阅读次数:
166
动态规划 :你追一个MM的时候,需要对该MM身边的各闺中密友都好,这样你追MM这个问题 就分解为对其MM朋友的问题,只有把这些问题都解决了,最终你才能追到MM。 因此,该问题适用于聪明的MM,懂得“看一个人,不是看他如何对你,而是看 他如何对他人。”的道理,并且对付这样的MM总能得到最优解。但确定是 ...
分类:
编程语言 时间:
2016-08-30 17:39:43
阅读次数:
179
求a1x1+a2x2+a3x3+……+anxn = dy中的最小正整数解(是让y的值尽可能的小的正整数) 用图论方法最短路来做,从零点开始,记录d的剩余系中每个点已求得的多项式的最小值,最后0的情况整除d就是最优解(注意a=0的情况) ...
分类:
其他好文 时间:
2016-08-27 11:22:43
阅读次数:
266
想法题,最优解法确实不太好想,刚开始想了一个二分的方法。
后来发现在最坏情况下,算法会退化为O(n+m),于是有了下面的想法:
每次把前K小的名额均分为两半,分到两个数组中,每组获得这个名额的最大数进行PK。
小的一方分到名额的数在下次分配中可以不考虑,因为已经可以确定他们必定属于前K小。
同时下一次剩余的未分配名额减去本次筛选掉的名额。
如此反复,直到最后只剩一个名额,或者某一组没有数。
在每一组数的个数大于k/2个时,这种方法每次都可以稳定筛选掉k/2个数,因而不论什么样的情况,效率都不会明...
分类:
其他好文 时间:
2016-08-23 22:09:52
阅读次数:
146
题目链接:点击打开链接
思路:用d[i][j][last][p]表示第一个串到了i位置, 第二个串到了j位置,上一个操作是last操作, 是否开始匹配的最优解。
该题有坑的, 比赛时多亏队友的提示: 当第一个串匹配完毕, 第二个串剩下的部分要当作减去了。
细节参见代码:
#include
#include
#include
#include
#include
#includ...
分类:
其他好文 时间:
2016-08-23 22:09:19
阅读次数:
141
我觉得我要改一下签名了……怎么会有窝这么啰嗦的人呢? 做这题需要先学习左偏树《左偏树的特点及其应用》 然后做一下POJ3666,这题的简单版。 思路: 考虑一下维护中位数的过程原数组为A,找到的不降数列为B当对于A的前n个数已经找好了最优解B[1…n],可知此时A被分成很多块,并被一些大顶堆记录,假 ...
分类:
其他好文 时间:
2016-08-23 13:04:45
阅读次数:
160
题目地址 分析:如果用二分法,关键是score和aid分开排序,score排序是为了充分利用中位数的性质,这样就可以确定m左右必须各选N/2个,到这之后有人是用dp求最优解,可以再次按照aid排序一次,可以直接确定最优解(肯定是从最小的开始选择!): 1 #include <cstdio> 2 #i ...
分类:
其他好文 时间:
2016-08-19 13:02:28
阅读次数:
177
树形dp。 先dfs一次处理子树上的最优解,记录一下回到这个点和不回到这个点的最优解。 然后从上到下可以推出所有答案。细节较多,很容易写错。 ...
分类:
其他好文 时间:
2016-08-19 07:30:59
阅读次数:
155
题目:给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k。求arr得所有子数组中所有元素相加和为k的最长子数组长度。 解答:最优解可以做到时间复杂度为o(n),额外空间复杂度为o(1).首先用两个位置来标记子数组的左右两头,记为left和right,开始时都在数组的最左边(left= ...
分类:
编程语言 时间:
2016-08-14 23:47:39
阅读次数:
391
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5773 题目大意: T组数据,n个数(n<=100000),求最长上升子序列长度(0可以替代任何数) 题目思路: 【动态规划】【最长上升子序列】 按最长上升子序列做,遇到0的时候更新所有长度的最优解。 ...
分类:
其他好文 时间:
2016-08-14 10:17:05
阅读次数:
118