【王道機試筆記21】最長遞增子序列(LIS)

最長遞增子序列(LIS)

例7.3 攔截導彈

代碼7.3

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n;
	int a[25];
	int x[25];
	while(cin >> n){
		for(int i=0;i<n;i++)
			cin >> a[i];
		for(int i=0;i<n;i++){
			int tmax = 1;
			for(int j=0;j<i;j++){
				if(a[i]<=a[j])
					tmax = max(tmax,x[j] + 1);
			}
			x[i] = tmax;
		}
		int max = 0;
		for(int i=0;i<n;i++){
			if(max < x[i])
				max = x[i];
		}
		cout << max << endl;
	}
	return 0;
}

合唱隊形

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n;
	int a[105];
	int xl[105];
	int xr[105];
	while(cin >> n){
		for(int i=0;i<n;i++)
			cin >> a[i];
		for(int i=0;i<n;i++){
			int tmax = 1;
			for(int j=0;j<i;j++){
				if(a[i] > a[j])
					tmax = max(tmax,xl[j] + 1);
			}
			xl[i] = tmax;
		}
		for(int i=n-1;i>=0;i--){
			int tmax = 1;
			for(int j=n-1;j>i;j--){
				if(a[j] < a[i])
					tmax = max(tmax,xr[j] + 1);
			}
			xr[i] = tmax;
		}
		int max = 0;
		for(int i=0;i<n;i++)
			if(xl[i] + xr[i] -1 > max)
				max = xl[i] + xr[i] - 1;
		cout << n - max << endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章