처음에 재귀를 활용했는데, 시간초과가 발생했습니다.
따라서 DP로 접근해서 풀었습니다. (아래 그림 참조)
T = int(input())
for tc in range(1, T+1):
N = int(input())
numbers = list(map(int, input().split()))
dp = [0] * N
dp[0] = 1
for i in range(1, N):
maxV = 0
# 현재 위치 원소 인덱스보다 작은 인덱스 값을 가지는 원소 탐색
for j in range(i-1, -1, -1):
# 탐색하다가 나보다 작은 숫자라면
if numbers[i] >= numbers[j]:
# 이때까지의 최장 길이 값을 저장
if maxV < dp[j]:
maxV = dp[j]
dp[i] = maxV + 1
print(f'#{tc} {max(dp)}')