思路:树形结构 加一个点(0点)构成森林 然后树形dp。。。
状态转移方程:
dp[x][j] = max(dp[x][j], dp[cnt][j-i] + dp[x][i]);
表示第x个的子节点中取j个 为最优解 cnt为x的某个子节点
代码:
#include
#include
#include
#include
#include
#include
#inc...
分类:
其他好文 时间:
2015-07-21 10:42:16
阅读次数:
85
一、动态规划算法
动态规划算法通常基于一个递推公式及一个或多个初始状态。当前问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式复杂度,因此它比
回溯法、暴力法要快。首先,我们要找到某个状态的最优解,然后在它的帮助下,找到下一个状态的最优解。要做的是抽象出动态规划的状态和状态转移方程(递推公式)。
二、编辑距离
1、问题描述
设A和B是2个字符串。要用最少的字符操...
分类:
其他好文 时间:
2015-07-21 01:36:40
阅读次数:
226
这个贪心的行为在算法中也成为了一种指导思想,也就是说贪心算法所作出的选择在当时的环境下是最好的,说深一点就是它只是某种
意义上的局部最优解,但不一定是全局最优解,此时往往接近于最优解。
一: 优点
前面也说了,贪心只是求的当前环境下的最优解,而不是追究整体的最优解,所以贪心就避免了为求的整体最优解而枚举各种方案所
耗费的时间。
二: 问题...
分类:
编程语言 时间:
2015-07-20 23:39:52
阅读次数:
267
题意:给你m个字符,其中有n种字符,每种字符都有两个值,分别是增加一个这样的字符的代价,删除一个这样的字符的代价,让你求将原先给出的那串字符变成回文串的最小代价。
思路:区间dp 设dp[i][j]表示从i到j区间满足条件的最优解
状态方程:
if(str[i]==str[j])dp[i][j]=dp[i+1][j-1];
else
dp[i][j]=min(dp[i+1][j]+val...
分类:
其他好文 时间:
2015-07-20 16:25:30
阅读次数:
74
还是简单的树形dp,不过要判断最优解是否有多种。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int N = 201; 8 int head[N]; 9 int ...
分类:
其他好文 时间:
2015-07-20 12:20:03
阅读次数:
100
该题实际上就是LCS的变形,所要求的最短合成串长度其实就是两串相加再减去LCS的长度 。 很好理解,因为合成串中一定要包含LCS中的元素,然后非LCS的元素都要加进去,这样两串相加就多了一个LCS 。 所以答案就是len1 + len2 - len_LCS
然而该题的难点是求最优解的个数 。
显然,由于合成串中一定要有LCS,因此,解的个数的求解和刚才完成的dp有着千丝万缕的联系 。...
分类:
其他好文 时间:
2015-07-18 21:19:55
阅读次数:
152
贪心算法是使所做的选择看起来都是当前最优的,通过所做的局部最优选择来产生一个全局最优解。
其具有的性质如下:
1)贪心选择性质:一个全局最优解可以通过局部最优(贪心)选择来达到。即,在考虑如何做选择时,我们只考虑对当前问题最佳的选择而不考虑子问题的结果。
这一点是贪心算法不同于动态规划之处:在动态规划中,每一步都要做出选择,但是这些选择依赖于子问题的解。因此,解动态规划问...
分类:
编程语言 时间:
2015-07-18 12:45:42
阅读次数:
2177
动态规划四个步骤:1)描述最优解的结构2)递归定义最优解的值3)按自底向上的方式计算最优解的值4)由计算出的结果构造一个最优解定义:pi-1表示第i个矩阵的行数,pi表示第i个矩阵的列数 Ai..j表示对乘积AiAi+1...Aj求值的结果 i<j,i<=k<j m[i,j]:表示矩...
分类:
其他好文 时间:
2015-07-18 10:49:33
阅读次数:
347
虽然这题可以用暴力n^3过,但是还有有种n^2的方法的,枚举b,对于b,分别枚举a和c,得到对于这个b的最优解,然后从所以b中选一个最优的。要保证字典序最小,只要从小往大枚举就好了还有一种dp的做法,我没看懂。。。感谢moonflyer,酱神给我的这个思路#include#include#inclu...
分类:
其他好文 时间:
2015-07-18 00:27:55
阅读次数:
208
在动态规划问题中,我们经常会遇到以下问题,最优解倒是求出来了,但是最优解的路径呢?如何输出?这确实是一个问题,而且往往比较难哟。。我这里说的路径是指,像在钢条切割问题中,从哪些地方切可以达到最优化,在矩阵链乘问题中,从哪些地方进行组合可以使效率最高?在钢条切割问题中:for(j=1;jprice){...
分类:
其他好文 时间:
2015-07-17 20:40:31
阅读次数:
185