hdu 1087最长上升子序列和问题】的更多相关文章

看来大佬的dp思路,在这里就简单的总结下吧. 拿到一个问题,先得考虑是否适用dp算法. 1,找到最优解的结构,看其子问题是否也满足最优化(子问题最优化问题) 2,  看时候有子问题重叠 确定一个问题可以用dp来解决以后开始分析 1,用递归的定义来划分解的结构. 2,选择合适的数据结构来存放子问题的最优解. 3,按怎样的顺序去存放子问题. 嗯,,目前就理解到这里了 上代码 dp[i]表示的是以i为结尾的最长上升和的长度 dp[i]的递归定义 =max(dp[j]+a[i]) //a[i] 为数组里…
这个博客说的已经很好了.http://blog.csdn.net/shuangde800/article/details/7474903 简单记录一下自己学的: 问题就是求一个数列最长上升子序列的长度. 如果子序列长度相同,那么末尾小的子序列更有可能成为最长的子序列.所以就用一个l数组存当子序列长度为len时最小的末尾元素.如果序列下一个值比l[len]大,说明上升子序列长度增加,那么l[len++]=a[i];如果是小,就想办法把它插入到了l数组中.... HDU 1950 说白了就是求lis…
题意 给出一个序列 问它的最长严格上升子序列多长 这个序列中的0可以被替代为任何数 n的范围给出了1e5 所以平常的O(n*n)lis不能用了 在kuangbin的模板里有O(nlogn)的模板 套上就可以过了 但是比赛的时候没有拿模板= =. 于是就想出了另外一个时间复杂度不明的办法= =. 将序列从前往后扫 设定一个数组a a[i]=z a[i]为当前i长度的上升子序列中的最小的尾数的大小 maxl为当前找出的最长的子序列长度 每次我们扫到一个数 都对0-maxl长度的a[i]进行判断 看能…
//Accepted 3540 KB 62 ms //dp 最长上升子序列 #include <cstdio> #include <cstring> #include <iostream> using namespace std; ; int dp[imax_n]; int d[imax_n]; int a[imax_n]; int n; int len; int max(int a,int b) { return a>b?a:b; } int binary_se…
Bellovin Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 858    Accepted Submission(s): 395 Problem Description Peter has a sequence a1,a2,...,an and he define a function on the sequence -- F(…
题意是要在两条平行线间连点,要在线不交叉的前提下尽可能多的连线,问最多能连多少条线. 现假定题中所给的是 9 组点,分别是:1—3,2—8,3—5,4—9,5—2,6—4,7—6,8—7,9—1,如图示:  则将所给的每组 p 和 r 存在数组 a[ ] 中:a[ p ] = r: 问题就转化成了在数组 a[ ] 中求最长上升子序列的长度.显然要是直接暴力做的话,每个数字都有选和不选两种可能,那么就是 O( 2 ^ n ) 的复杂度,这是无法接受的. 除暴力外求解最长上升子序列长度的方法有三种(…
Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32693    Accepted Submission(s): 14786 Problem Description A subsequence of a given sequence is the given sequence with some el…
Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 53443    Accepted Submission(s): 24607 Problem Description A subsequence of a given sequence is the given sequence with some el…
The All-purpose Zero Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 947    Accepted Submission(s): 453 Problem Description ?? gets an sequence S with n intergers(0 < n <= 100000,0<= S[i] &l…
题意:先给两个水果的名字然后得出一个最短的序列包含这两个词. 思路:我一开始的思路是先求出最长公共子序列,然后做一些处理将其他的部分输出来:两种水果的字符串和最长公共子序列的字符串这三个字符串做对比,当他们三个相同的时候将最长公共子序列里面的字符去掉,如果不相同,将水果中的字符串中的字符去掉直到相同为止,不过网上用了一个好像比较方便的方法,在输出最长公共子序列的路径时候也能输出其他的字符(利用递归回溯). 注意:网上有一个求最长公共子序列的过程的二维的图值得一看,方便理解!! 我的方法: //最…