문제링크 : https://www.acmicpc.net/problem/11055
#include<bits/stdc++.h>
using namespace std;
int N;
int a[1001];
int dp[1001];
int maxIncSeq(int n){
int&ret = dp[n];
if(ret != -1) return ret;
// 이전에 문제들에서 계속 배웠던 전체를 확인하는 것이다.
for(int i=n+1; i<=N; i++){
if(a[i]>a[n]){
// maxIncSeq(i) + a[i] 를 넘겨줌으로서 합을 구한다.
ret = max(ret, maxIncSeq(i) + a[i]) ;
}
}
return ret;
}
int main(){
ios_base::sync_with_stdio(false);
// freopen("../input.txt","rt",stdin);
cin >> N;
memset(dp, -1, sizeof(dp));
for(int i=1; i<=N; i++){
cin >> a[i];
}
cout << maxIncSeq(0) + 1 << endl;
return 0;
}
0번을 넘겨줘서 전체를 확인하는 방법이 좋았다. 또한 이제 실버수준의 부분수열은 다 풀수 있을것같다.!