学自:https://open.163.com/movie/2010/12/L/4/M6UTT5U0I_M6V2U1HL4.html 最长公共子序列:(本文先谈如何求出最长公共子序列的长度,求出最长公共子序列在文章最下方) 昨天看了网易公开课的麻省理工的算法导论讲的最长公共子序列,收获很大,网址已给出,推荐观看.我也将会把如何减少算法的空间的代码放在下面,这是视频中提到的,用的也是老师所说的保存一行,好,现在来说说最长公共子序列的求法.先把问题简单描述一下,就是有两个字符串序列,求他们最长的公共…
1.LIS : 给定一个序列,求它的最长上升子序列(n<=2000) 第一种 O(n^2): dp[i] 为以i为开头的最长上升子序列长度 code1: #include<cstdio> #include<iostream> using namespace std; int n,ans; int a[2005],dp[2005]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf…
题目大意: 给定一个字符串 字符为0~9 求翻转某个区间后使得串中的最长不降子序列最长 因为字符范围为0~9 假设有一个 0 1 2 3 4 5 6 7 8 9 的序列 此时翻转某个区间得到形如 0 1 ... L[R R-1 ... L+1 L]R R+1 ... 9 的序列 用这个序列与原串匹配一个最长公共子序列 题解: https://www.cnblogs.com/ZERO-/p/9493597.html https://blog.csdn.net/qkoqhh/article/deta…
注意:抽象成以下描述即为最长非降/下降子序列问题(一维状态) 问题描述:在一个无序的序列a1,a2,a3,a4…an里,找到一个最长的序列满足:(不要求连续) ai<=aj<=ak…<=am,且i<j<k…<m.(最长非降子序列) 或 ai>aj>ak…>am,且i<j<k…<m.(最长下降子序列). 问题分析:(以最长非降子序列为例) 考虑状态数组opt[maxn]; 其中opt[i]表示a[i]时可与之前元素构成非降子序列的最大长…
你给出一定数额的钱 i 元给我,我利用手中的硬币(m元, j元, k元...)兑换等值的钱给你,要求硬币数最少. 举例:给出1-11的钱,手中硬币有1元,3元,5元. 重点是找到状态和状态转移方程. 具体可以看这里:点击进入 引用自上面链接: 最终我们要求解的问题,可以用这个状态来表示:d(11),即凑够11元最少需要多少个硬币. 那状态转移方程是什么呢?既然我们用d(i)表示状态,那么状态转移方程自然包含d(i), 上文中包含状态d(i)的方程是:d(3)=min{d(3-1)+1, d(3-…
分析: 最长不降子序列,n很大o(n^2)肯定超,想到了小明序列那个题用线段树维护前面的最大值即可 该题也可用二分搜索来做. 注意问题输出时的坑,路复数后加s #include <map> #include <set> #include <list> #include <cmath> #include <queue> #include <stack> #include <cstdio> #include <vecto…
D. Bubble Sort Graph time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Iahub recently has learned Bubble Sort, an algorithm that is used to sort a permutation with n elements a1, a2, ..., an …
http://acm.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 27362    Accepted Submission(s): 10804 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦…
1.最长递增子序列模板poj2533(时间复杂度O(n*n)) #include<iostream> #include<stdio.h> #include<string.h> using namespace std; int dp[1005],a[1005]; int main() { int n; while(scanf("%d",&n)>0) { for(int i=1;i<=n;i++) scanf("%d&quo…
题目链接 基础的最长公共子序列 #include <bits/stdc++.h> using namespace std; ; char c[maxn],d[maxn]; int dp[maxn][maxn]; int main() { while(scanf("%s%s",c,d)!=EOF) { memset(dp,,sizeof(dp)); int n=strlen(c); int m=strlen(d); ;i<n;i++) ;j<m;j++) if(c…