计蒜客-最长不上升子序列

#include <stdio.h>
#include <stdlib.h>

int lengthOfLNIS(int *nums, int length) {
	//len为子问题:以i结尾的最长不上升子序列
    int len[length+10];
    for(int i = 0; i < length; i++)
        len[i] = 0;
    len[0] = 1;

    for(int i = 0; i < length; i++){
        int tmp = 0;
        for(int j = 0; j < i; j++){
            if(nums[i] <= nums[j] && len[j] > tmp)
                tmp = len[j];
        }
        len[i] = tmp + 1;
    }

    int ans = 0;
    for(int i = 0; i < length; i++)
        if(len[i] > ans)
            ans = len[i];

    return ans;
}
int main() {
	int n;
	scanf("%d", &n);
	int *a = malloc(sizeof(int) * n);
	for (int i = 0; i < n; ++i) {
		scanf("%d", &a[i]);
	}
	printf("%d\n", lengthOfLNIS(a, n));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/81221720