dp
文章平均质量分 66
为什么这么多叫solo
不要停下你的脚步
展开
-
poj1080
涉及的算法:动态规划题意:根据给定的字符间的相似度矩阵求出两个字符串的最大相似度分析:对于两个给定的字符串X=(x1,x2,x3,......,xm),Y=(y1,y2,y3,......,xn);有三种可能的结尾方式:第一种以xm、ym结尾,第二种以xm、- 结尾第三种以-、yn结尾我们可以设dp[i][j]表示(x1,x2,....xi)与(y1,y2,......yj)的最大原创 2015-08-22 21:36:00 · 573 阅读 · 0 评论 -
最长公共子串
1、最长公共子串与最长公共子序列的区别? 最长公共子序列在原序列中不要求连续,而最长公共子串要求在原序列中是连续的。分析:求两个子串x(x[0],x[1],……,x[n-1]),y(y[0],y[1],……,y[m-1])的最长公共子串,令dp[i][j]表示以x[i-1],y[j-1]结尾的最长公共子串的长度。则可以得出转态转移方程: import java.util.Scanner;//s1原创 2016-08-15 15:39:39 · 457 阅读 · 0 评论 -
poj2533
设计算法:dp+LIS题目大意给定一个序列A={a1,a2,…,an},现在要求出A的一个最长上升子序列的长度代码如下:import java.util.Scanner;public class Main_2533 { static int n;//序列的长度 static int[] a;//a[i]:序列的第i个值 static int[] dp;//dp[i]:以a原创 2016-03-07 15:17:21 · 397 阅读 · 0 评论 -
poj3267
涉及算法:dp题目大意:现有一个长度为m的字符串s和n个单词,现在需要删除字符串中的某些字符,使得剩下的部分可以用n个单词的中的某些来表示,求最少需要删除多少个字符。题目分析:设dp[i]表示从s的第0个字符开始长度为i的字符串需要删除的字符数(末位位i-1),则dp[i]是取决于dp[1]~dp[i-1]的,如果s[i]加上其前面的一些字符(可以不连续)能和某个word匹配,则dp[i]原创 2016-01-19 17:44:53 · 376 阅读 · 0 评论 -
poj3176
涉及算法:dp题目大意:现有n行数,以金字塔的形式排列,即第一行一个数字,第二行2个数字,以此类推,现在需要找一条从第一层到第n层的路线,使得该路线上的所有点的权值和最大规定:第i层的第j个数,只能和第i+i层的第j-1和j个数相连。问题分析:根据分析可以得出状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]),dp[i][j]表示以第i行第j个位置原创 2016-01-19 12:10:02 · 649 阅读 · 0 评论 -
poj2533
涉及算法:dp+LIS题目大意:现在有一组数A={a1,a2,…,an},现在需要求出A的最长上升子序列的长度代码如下:import java.util.Scanner;public class Main_2533 { static int n;//序列的长度 static int[] a;//a[i]:序列的第i个值 static int[] dp;//dp[i]:以a原创 2016-01-18 21:51:11 · 411 阅读 · 0 评论 -
最长不降子序列(LIS)
为题描述:给定一个序列X={x1,x2,x3…xn},求X的一个子序列使得该子序列单调不降,且长度最长。设c[i]表示以xi结尾的单调不降子序列的长度。很显然,c[i]取决于c[j],1=x[j],且c[i]c[i]的最大值即为所求单调不降子序列的最大长度代码模板:public class LIS{ static int n;//序列的大小 static int s[原创 2016-01-17 18:49:27 · 629 阅读 · 0 评论 -
poj1837
涉及算法:dp题目描述:有一个天平,天平上有m个勾,每个勾有着不同的臂长,分别为c(1)~c(m),现在有n个砝码,每个砝码分别重g(1)~g(n),现在要求将所有的砝码挂在勾上,使得天平平衡,问有多上种方法。其中-15题目分析,另dp[i][j]=a:表示只取1~i号砝码,使得平衡度为j有a种方法。若知道dp[i-1][j],那么很容得出dp[i][j]=∑dp[i-1][j-c[k]*原创 2016-01-18 18:43:12 · 349 阅读 · 0 评论 -
poj1836
设计算法:dp+LIS问题描述:有一组士兵身高为H={h1,h2,h3…,hn},现在要求使每个士兵可以向左或者向右看可以看到无穷远处,问最少需要从原队列中拿掉多少士兵,使得队列可以达到要求的状态。这是一个最长不降子序列的问题,我们需要以某个士兵h[i]将队列分成两个部分,左边是最后一个数为h[i]的一个最长上升子序列,右边是h[i+1]~h[n]的一个最长递减子序列,我们现在需要的是左右原创 2016-01-18 10:21:07 · 330 阅读 · 0 评论 -
0-1背包、多重背包、钢条问题分析
0-1背包、多重背包、钢条问题这都是属于动态规划的范畴。1、0-1钢条问题问题描述:给定一段长度为n的钢条和一个价格表p(i)(i=1,2,3,4…n),p(i)表示长度为i的钢条的价格,求切割方案,是的收益r(n)最大。很显然我们可以通过更短钢条的收益来描述r(n),r(n)=max{r(n-1)+r(1),r(n-1)+r(2),…,r(1)+r(n-1)}1、求最大收益原创 2016-01-16 10:36:17 · 591 阅读 · 0 评论 -
poj1260
涉及算法:动态规划(dp)题目大意:给定n种不同种类的珍珠,每种珍珠对应着一个单价和一个购买量,要求我们以最少的钱买到同样总量珍珠,而且保证珍珠的品质不能下降,任意购买一种价格为p数量为n的珍珠需要支付:(n+10)*p题目分析:我们以dp[i]表示只考虑购买第1到第i种珍珠所花费的最少的钱,amt[i]表示需要购买的第i种珍珠数,sum(i,j)表示第i到第j种珍珠的总数,p[i]表原创 2015-09-19 09:10:32 · 442 阅读 · 0 评论 -
poj1159
涉及算法:dp+lcs题目大意:对于给定的字符串S,求出最少需要在S中添加多少个字符可以使S对称(我们称此事S为回文串),即从左往右看s和从右往左看S是一样的,题目分析:两种思路思路一:设dp[i][j]为字符串S从第个字母到第j个字母S之间的这段字符串S(i,j)需要填加的字符数,使得S(i,j)为回文串。思路二:S中需要填加的字符数等于:S的长度-S和其逆序列S’的最长公共原创 2016-01-14 20:14:06 · 336 阅读 · 0 评论 -
算法分析—最长公共子序列(LCS)
子序列:给定一个序列X={x1,x2,…,xm},另一个序列Z={z1,z2,…,zk},即存在一个严格递增的X的下标序列{i1,i2,…,ik},对于所有的j=1,2,3…,k,满足xij=zj,我们称Z为X的子序列公共子序列:对于给定的两个序列X,Y,若Z既是X的子序列也是Y的子序列,则称Z是X和Y的公共子序列。我们需要解决的是求最长公共子序列定理:令X={下x1,x2,…原创 2016-01-15 11:18:01 · 1115 阅读 · 0 评论