最长增长子序列 DP
#include<iostream>
using namespace std;
#define INF 0x7fffffff
#define N 10000 // O(n^2)
int len[N];
int dp(int *a, int n){
int mx = , mxlen = ;
for (int i = ; i < n; ++i)
len[i] = ;
for (int i = ; i < n; ++i){
mx = ;
for (int j = ; j < i; ++j) // 寻找len[0...i-1]最大值
if (a[j]<a[i] && len[j]>mx)
mx = len[j];
len[i] = mx + ;
if (mxlen < len[i]) mxlen = len[i]; // 更新最大长度
}
return mxlen;
} // O(nlogn)
int mv[N]; //mv[i]存放序列长度为 i+1 的最小元素
int binarySearch(int r, int val)
{
int left = , right = r, mid;
while (left < right){
mid = (left + right) / ;
if (mv[mid] < val) left = mid + ;
else right = mid;
}
return left;
}
int binaryLIS(int *a, int n)
{
int len = ;
mv[] = a[];
for (int i = ; i < n; ++i){
if (a[i]>mv[len]) mv[++len] = a[i];
else mv[binarySearch(len, a[i])] = a[i];
for (int i = ; i < len; ++i)
cout << mv[i] << ' ';
cout << mv[len] << endl;
}
return len + ;
} int main()
{
int a[] = { , , , , , , };
cout << dp(a, ) << endl;
cout << binaryLIS(a, ) << endl;
}
最长增长子序列 DP的更多相关文章
- 最长增长子序列(LIS)
给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说 ...
- POJ-2533最长上升子序列(DP+二分)(优化版)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 41944 Acc ...
- LCS最长公共子序列~dp学习~4
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 Palindrome Time Limit: 4000/2000 MS (Java/Others ...
- Longest Ordered Subsequence POJ - 2533 最长上升子序列dp
题意:最长上升子序列nlogn写法 #include<iostream> #include<cstdio> #include<cstring> #include&l ...
- POJ 1458 最长公共子序列(dp)
POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...
- 【BZOJ2423】[HAOI2010]最长公共子序列 DP
[BZOJ2423][HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
- hdu 1159 Common Subsequence(最长公共子序列 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- 最长公共子序列 DP
class Solution: def LCS(self,A,B): if not A or not B: #边界处理 return 0 dp = [[0 for _ in range(len(B)+ ...
- 65.Longest Increasing Subsequence(最长增长子序列)
Level: Medium 题目描述: Given an unsorted array of integers, find the length of longest increasing sub ...
随机推荐
- c++网络通信(与服务器通信聊天)和c#网络通信
c++网络通信(有待整理) 链接:http://pan.baidu.com/s/1i3nMLKT 密码:ksi8 c#网络通信(tcp/udp两部分) TCP发送端: using System; us ...
- 杭电OJ—— 1084 What Is Your Grade?
What Is Your Grade? Problem Description “Point, point, life of student!” This is a ballad(歌谣)well kn ...
- Java API设计CheckList
API设计原则:正确.好名.易用.易学.够快.够小.但我们从来不缺原则,〜〜〜 Interface 1.The Importance of Being Use Case Oriented,一个接口应当 ...
- ckeditor 使用手册
CKEditor使用手册 在使用CKEditor过程中遇到了一些问题,现把它整理成手册,以便随时翻阅. 在页面<head>中引入ckeditor核心文件ckeditor.js <sc ...
- Android Assert工具类
/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- Wordpress主题中常用代码总结
1. 在 Wordpress主题中显示最热文章的 PHP代码 <?php $result = $wpdb->get_results("SELECT comment_count,I ...
- 定制化Azure站点Java运行环境(3)
定制化Azure Website提供的默认的Tomcat和JDK环境 在我们之前的测试中,如果你访问你的WEB站点URL时不加任何上下文,实际上你看到的web界面是系统自带的测试页面index.jsp ...
- QT Creator 2.7.2 代码自动补全快捷键设置
在QT Creater界面点[工具]再进[选项]找到[环境]下的[键盘]选项,搜索[CompleteThis]发现默认快捷键就是CTRL+SPACE,把它删除,然后添加自己想设置的快捷键(因为之前用e ...
- 在Servlet中使用JSON
在Servlet中使用JSON,和上篇的使用相同,只不过多了配置web.xml的内容 servlet代码如下: import java.io.IOException; import java.io.P ...
- __declspec(dllimport)的作用
是时候总结一下__declspec(dllimport)的作用了.可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__dec ...