点这里 |
---|
题意: 从n个数字里找到最长的上升子序列,并输出个数。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
inline int read() {
int s = 0, w = 1;
char ch = getchar();
while(ch < '0' || ch > '9') {
if(ch == '-') w = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
return s * w;
}
const int N = 1e3 + 10;
int n;
int a[N], dp[N];
void run() {
for(int i = 1; i <= n; i++) a[i] = read();
int maxn = 1;
for(int i = 0; i <= n; i++) dp[i] = 1;
for(int i = 1; i <= n; i++)
for(int j = i + 1; j <= n; j++) {
if(a[j] > a[i] && dp[i] + 1 > dp[j])
dp[j] = dp[i] + 1;
maxn = max(maxn, dp[j]);
}
printf("%d\n", maxn);
}
int main() {
while(~scanf("%d", &n)) run();
return 0;
}