该题目和求两个字符串的最长公共子串,有相似之处。关键是求得动态规划方程。即f(m,n)= MIN(f(m-1,n-1),f(m-1,n),f(m,n-1)) + 1;f(m,n)表示长度为m的字符串转换为长度为n的字符串所需的最少步骤。f(m,n)递推是通过和最后一个字符串的比较递推得到。存在一个定...
分类:
其他好文 时间:
2015-03-18 01:08:08
阅读次数:
139
欧几里得旅行商问题 是对平面上给定的n个点确定一条连接各点的最短闭合旅程的问题。图a给出了7个点问题的解,这个问题的一般形式是NP完全的,故其解需要多于多项式的时间。 J.K.Bentley建议通过只考虑双调旅程来简化问题,这种旅程即为从最左点开始,严格从左到最右点,再严格地从最右点回到最左点...
分类:
编程语言 时间:
2015-03-17 23:22:30
阅读次数:
1208
题目描述 Description
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1Ti+1>…>TK(1
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的...
分类:
其他好文 时间:
2015-03-17 20:14:21
阅读次数:
175
首先是入门级别的一维dp。这个是凑硬币,如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?动态规划算法的核心是:每个子问题的状态和状态的转移方程。状态是:dp[i] ,即凑够i元最少需要的硬币的个数转移方程是:dp[i] = min(dp[i-C 1 ]+1,dp[i-C 2...
分类:
其他好文 时间:
2015-03-17 19:33:37
阅读次数:
113
一.有N堆石子,每堆的重量是w[i],可以任意选两堆合并,每次合并的花费为w[i]+w[j],问把所有石子合并成为一堆后的最小花费是多少。因为是可以任意合并,所以每次合并的时候选最小的两堆合并,贪心即可。二.有N堆石子,每堆的重量是a[i],排成一条直线,每次只能合并相邻的两堆,直到合成一堆为止,问...
分类:
其他好文 时间:
2015-03-17 17:30:37
阅读次数:
180
这题说的是x[1]+x[2]+x[3]+…+x[n]=n, 这里0 #include #include #include using namespace std;typedef long long LL;const int maxn = 50010;const int maxm =321;int d...
分类:
其他好文 时间:
2015-03-17 00:34:17
阅读次数:
131
动态规划通常用于解决最优化问题,在这类问题中,通过做出一组选择来达到最优解。在做出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常就会很有效,其关键技术就是对每个这样的子问题都保存其解,当其重复出现时即可避免重复求解。钢条切割问题Serli...
分类:
编程语言 时间:
2015-03-17 00:31:51
阅读次数:
265
题目链接经典DP 整数划分问题 用动态规划递推设dp[i][j]表示拆分数i,最大的那么数字不超过j的方案数。第一种是最后一个数不超过j-1,此时方案数为dp[i][j-1],否则最后一个数字刚好是j,此时的方案数是dp[i-j][j]。注意一些边界的情况。 1 #include 2 #inclu....
分类:
其他好文 时间:
2015-03-17 00:28:33
阅读次数:
150
各种序列复习:(1)最长上升子序列。1、这个问题用动态规划就很好解决了,设dp[i]是以第i个数字结尾的上升子序列的最长长度。那么方程可以是dp[i]=max(dp[j]+1)。(jd[p],q 2 #include 3 #include 4 using namespace std;...
分类:
其他好文 时间:
2015-03-16 12:25:02
阅读次数:
325
题意:
给一块m行n列的土地,有一些格可以种树,另外一些不可以,树不能相邻,问一共有多少种种法。
分析:
从后往前种,子问题向父问题扩展,当种到某一格时只有他和他后面的n-1个格子的情况对它有影响,故对这n个格子进行编码为状态S,表示种完(多米诺骨牌那题是放置前,注意区别,都可行)这n个格子的状态。父问题由稍小子问题逐步解决,正是动态规划的思想。
代码:
//poj 3254
//sep...
分类:
其他好文 时间:
2015-03-16 07:34:31
阅读次数:
149