AcWing 895. 最长上升子序列
原题链接
简单
作者:
cdxxx
,
2024-12-04 21:29:52
,
所有人可见
,
阅读 1
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 1005
int w[N];
// 自定义求两个整数最大值的函数,C语言没有max这个函数
int max(int a, int b) {
return (a > b)? a : b;
}
int lengthofLIS(int data[], int n) {
if(n<= 1){
return n;//注意
}
int dp[n];
int result = 1;//不能定义为0,因为我们的比较是在for循环里,如果整体只输入一个数,无法作出正确代码
for (int i = 0; i < n; i++) {
dp[i] = 1;
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (data[i] > data[j])
dp[i] = max(dp[j] + 1, dp[i]);
}
result = max(result, dp[i]);
}
return result;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &w[i]);
}
printf("%d", lengthofLIS(w, n));
return 0;
}
![捕获.PNG](https://cdn.acwing.com/media/article/image/2024/12/04/474663_0167a6c5b2-捕获.PNG)