南理OJ_单调递增最长子序列

原创 2015年11月20日 18:05:12
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=17
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
const int MAXN = 10000+5;
int d[MAXN];
char a[MAXN];
int G[MAXN][MAXN]; 

int max(int a, int b){
	if(a > b) return a;
	else return b;
} 
int dp(int i){
	int& ans = d[i];
	if(ans > 0) return ans;
	ans = 1; 
	for(int j = i-1; j >= 0; j--)
	if(G[i][j]) ans = max(ans, dp(j)+1);
	return ans; 
}
void _G(int len){  //存图 
	for(int i = 0; i < len-1; i++)//从1开始   第0个的G[0]就应该是0 
	{
		for(int j = i+1; j < len; j++) {
			if(a[j]>a[i]) G[j][i] = 1;
		}
	} 
}

void init(){
	memset(a, 0, sizeof(a));
	memset(G, 0, sizeof(G));
	memset(d, 0, sizeof(d));
}
int main(){
	int N;
	cin >> N;
	while(N--){
		init(); 
		scanf("%s", a);
		int len = strlen(a);
		_G(len); // 存好图
		int ans = 0;  // ans是答案
		for(int i = 0; i < len; i++){
			ans = max(ans, dp(i));
		} 
		printf("%d\n", ans);
	}
	return 0;
}//这个代码中的存图会导致内存爆炸  ,    过不了  !!!   还有这个即便内存不爆, 估计也会超时。
//接下来换了一种时间复杂度O(nlgn)的算法求最大上升子序列:(成功AC)
<pre name="code" class="cpp">#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int MAXN = 10000+5;
char lismin[MAXN], str[MAXN];
int lower_bound(char* A, int x, int y, int v, char* B){
	int m;
	while(x<y){
		m = x+(y-x)/2;
		if(A[m]>=B[v]) y = m;
		else x = m+1;
	}
	return x;
}
int main(){
	int T;
	cin >> T;
	while(T--){
		memset(str, '\0', sizeof(str));
		cin >> str;
		int l = strlen(str);
		int len = 1; 
		lismin[1] = str[0];
		for(int i = 1; i < l; i++){
			if(str[i]>lismin[len]) lismin[++len] = str[i];
			else {
				int pos = lower_bound(lismin, 0, len, i, str);
				lismin[pos] = str[i];
			}
		}
		cout << len << endl;
	}
	return 0;
}



                

NYOj-17-单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • qq_32680617
  • qq_32680617
  • 2016年03月21日 21:18
  • 677

NYOJ-17-单调递增最长子序列

单调递增最长子序列时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入...
  • william_jzy
  • william_jzy
  • 2016年08月06日 20:35
  • 120

nyist oj 17 单调递增最长子序列 (动态规划经典题)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abd...
  • u014253173
  • u014253173
  • 2014年08月15日 11:37
  • 4501

NYOJ 17 单调递增最长子序列(O(n2))+HDU 1025 Constructing Roads In JGShining +NYOJ 214 单调递增子序列(二)(O(nlogn))(整理)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=17 这题其实是跟导弹拦截一样的,因为还有个加强版,所以把这个跟加强版一起贴上来。经典动态...
  • A_Eagle
  • A_Eagle
  • 2012年02月08日 07:21
  • 3339

NYOJ17 单调递增最长子序列(最长单调递增子序列)

题目: 单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,...
  • riba2534
  • riba2534
  • 2016年11月23日 19:25
  • 220

NYOJ17 单调递增最长子序列 【二分法】+【动态规划】

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • u012846486
  • u012846486
  • 2014年04月23日 17:53
  • 1463

单调递增最长子序列 O(nlogn)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • u011455899
  • u011455899
  • 2014年02月15日 12:24
  • 721

NYOJ - 单调递增最长子序列(经典dp)

单调递增最长子序列 时间限制:3000 ms  |           内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就...
  • SevenMIT
  • SevenMIT
  • 2013年04月12日 00:53
  • 2463

NYOJ 17 单调递增最长子序列(动态规划)

时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一...
  • u011694809
  • u011694809
  • 2015年06月01日 09:18
  • 1075

单调递增最长子序列 南工17

和拦截导弹一样的题 #include #include #include using namespace std; # include int res[10001]; char s[1000...
  • liu_yutao
  • liu_yutao
  • 2013年04月18日 12:51
  • 433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:南理OJ_单调递增最长子序列
举报原因:
原因补充:

(最多只允许输入30个字)