fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <stdio.h>
  4. using namespace std;
  5. int main(void){
  6. cin.tie(NULL);
  7. ios::sync_with_stdio(false);
  8. int N;
  9. cin>>N;
  10. int arr[N+1] = {0};
  11. int dp[N+1] = {0};
  12. for(int i=1;i<=N;i++)
  13. cin>>arr[i];
  14. dp[1] = 1;
  15. int mmax = 1;
  16. for(int i=2;i<=N;i++){
  17. int cnt = 0;
  18. for(int j=1;j<i;j++){
  19. if(arr[i] > arr[j]){
  20. if(cnt < dp[j])
  21. cnt = dp[j];
  22. }
  23. dp[i] = cnt+1;
  24. if(mmax < dp[i])
  25. mmax = dp[i];
  26. }
  27. } // 14002와 11053 풀때 썼던 dp
  28. int arr_sum[N+1]={0}; //합을 저장하는 배열
  29. for(int i=1;i<=N;i++){
  30. int max_sum=0;
  31. for(int j=0;j<i;j++){
  32. if(dp[j] == dp[i]-1 && arr[j] < arr[i]){
  33. int temp = arr_sum[j];
  34. max_sum = max(max_sum,temp);
  35. } // dp가 1작고 arr[i]보다 작은 수의 arr_sum[j]중에 큰값을 max_sum에 저장
  36. }
  37. arr_sum[i] = arr[i] + max_sum; // arr_sum[i] 구하기
  38. }
  39. int result=0;
  40. for(int i=1;i<=N;i++)
  41. result = max(result,arr_sum[i]); // 한번 쭉 돌면서 제일 큰 값출력
  42. cout<<result<<endl;
  43. }
Success #stdin #stdout 0s 4336KB
stdin
5
1 6 2 3 7
stdout
13