题目:http://poj.org/problem?id=2533
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>
#define INF 0xfffffff
#define MAXN 100105
using namespace std;
int n;
int num[1005];
int dp[1005];
int main(){
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d",&num[i]);
dp[i] = 1;
}
int MAX = 0;
for(int i = 0; i < n; i++){
int tmp = 0;
for(int j = 0; j < i; j++){
if(num[j]<num[i]&&dp[j]>tmp){
tmp = dp[j];
}
}
dp[i] = tmp+1;
if(dp[i]>MAX)MAX = dp[i];
}
cout<<MAX;
}
总结: 最长上升子序列.