代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C/C++
】
最长公共单调子序列
作者:
欣冉
/ 发布于
2016/4/21
/
578
// 最长公共递增子序列, 时间复杂度O(n^2 * logn),空间 O(n^2) /** * n为a的大小, m为b的大小 * 结果在ans中 * "define _cp(a,b) ((a)<(b))"求解最长严格递增序列 */ #define MAXN 1000 #define _cp(a,b) ((a)<(b)) typedef int elem_t; elem_t DP[MAXN][MAXN]; int num[MAXN], p[1<<20]; int LIS(int n, elem_t *a, int m, elem_t *b, elem_t *ans){ int i, j, l, r, k; DP[0][0] = 0; num[0] = (b[0] == a[0]); for(i = 1; i < m; i++) { num[i] = (b[i] == a[0]) || num[i-1]; DP[i][0] = 0; } for(i = 1; i < n; i++){ if(b[0] == a[i] && !num[0]) { num[0] = 1; DP[0][0] = i<<10; } for(j = 1; j < m; j++){ for(k=((l=0)+(r=num[j-1]-1))>>1; l<=r; k=(l+r)>>1) if(_cp(a[DP[j-1][k]>>10], a[i])) l=k+1; else r=k-1; if(l < num[j-1] && i == (DP[j-1][l]>>10) ){ if(l >= num[j]) DP[j][num[j]++] = DP[j-1][l]; else DP[j][l] = _cp(a[DP[j][l]>>10],a[i]) ? DP[j][l] : DP[j-1][l]; } if(b[j] == a[i]){ for(k=((l=0)+(r=num[j]-1))>>1; l<=r; k=(l+r)>>1) if(_cp(a[DP[j][k]>>10], a[i])) l=k+1; else r=k-1; DP[j][l] = (i<<10) + j; num[j] += (l>=num[j]); p[DP[j][l]] = l ? DP[j][l-1] : -1; } } } for (k=DP[m-1][i=num[m-1]-1];i>=0;ans[i--]=a[k>>10],k=p[k]); return num[m-1]; }
试试其它关键字
最长公共单调子序列
同语言下
.
C分鱼问题
.
链表
.
最大连续和
.
编码字符串
.
libiconv字符编码处理及判断字符串是否为utf8
.
一组数中两两二元组,差最大有几对,差最小呢?(数组
.
通过管道获取一个进程的执行状态
.
多关键字排序
.
字符串字典序排序
.
3元一次方程(牛顿迭代法求方程的根)
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
欣冉
贡献的其它代码
(
12
)
.
根据文本框的值改变下拉列表的值
.
生成缩略图
.
马赛克效果
.
创建缝合效果
.
获取用textarea保存到数据库的内容,显示到页面保持换
.
七星彩
.
火狐和IE都支持网页字体变大变小、复制、收藏、打印
.
查看sqlserver 2008中性能低下的语句
.
Repeater中,寻找TextBox,Lable.等的值
.
最长公共单调子序列
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3