DP_NYOJ17/NYOJ79最长单调子序列
题目地址:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17
大致描述:给出一个字符串序列,要求找出最长的单调递增的子序列,比如:aaa 它的最长单调递增子序列为a 输出1 序列abklmncdefg 它的最长单调递增子序列是 abcdefg 输出7
/************************************************************* * > File Name: 单调递增最长子序列.cpp * > Author: weigang * > Mail: w_wg@qq.com * > Created Time: 2018年05月21日 星期一 21时11分48秒 *************************************************************/ #include<bits/stdc++.h> using namespace std; int LIS(char * s,int n) { char lis[n+1]; int max_len = 1; lis[0] = '0'; lis[1] = s[0]; for(int i = 1; i < n+1; i++) { int lift = 1,right = max_len; while(lift < right) { int mid = (lift + right)/2; if(lis[mid] <= s[i]) lift = mid+1; else if(lis[mid] > s[i]) right = mid; } if( (lis[right] > s[i]) && (lis[right-1] < s[i]) ) lis[right] = s[i]; else if(lis[right] < s[i]) { lis[right+1] = s[i]; ++max_len; } } return max_len; } int main(void) { int N; scanf("%d",&N); while(N--) { char s[10005]; int len; scanf("%s",s); len = strlen(s); printf("%d\n",LIS(s,len)); } return 0; }
最长单调递减子序列
题目地址http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=79
题目大意:找出序列中最长的单调递减的子序列
/************************************************************* * > File Name: 079_拦截导弹.cpp * > Author: weigang * > Mail: w_wg@qq.com * > Created Time: 2018年05月23日 星期三 13时49分41秒 *************************************************************/ #include<bits/stdc++.h> using namespace std; int a[22],d[25]; int f(int n) { int count = 0,max = 1; d[0] = INT_MAX; d[1] = a[0]; for(int i = 1; i < n; ++i) { int lift = 1,right = max; while(lift < right) { int mid = (lift + right) >> 1; if(a[i] > d[mid]) right = mid; else lift = mid+1; } if( a[i] < d[right] ) { d[right+1] = a[i]; max++; } else if( (a[i] > d[right]) && (a[i] < d[right-1])) d[right] = a[i]; } return max; } int main(void) { int N; cin >> N; while(N--) { memset(a,0,22); memset(d,0,25); int n,i; cin >> n; for(i = 0; i < n; ++i) { scanf("%d",&a[i]); } cout << f(n) << endl; } return 0; }

浙公网安备 33010602011771号