징검다리
2024. 3. 26. 11:50ㆍAlgorithm/Softeer
풀이
배열 내에서 연속으로 증가하는 개수의 최댓값을 구하는 문제였다. 먼저 dp 배열 내 모든 원소에 1을 저장시켜준 후 2중 for문을 통해 dp를 진행시켰다. 사용된 점화식은 다음과 같다.
dp[i] = max(dp[i],dp[j]+1)
i보다 작은 인덱스들에 한해서 현재 i레벨에서 저장된 값보다 작은 값이 있으면, 이전 레벨에서의 dp값에 1을 더하며 최댓값을 구하였다.
#include<iostream>
#include<vector>
using namespace std;
int N,dp[3001];
int main(int argc, char** argv)
{
int ans=0;
cin>>N;
fill(dp,dp+N,1);
vector<int> v(N);
for(int i=0;i<N;i++){
cin>>v[i];
}
for(int i=0;i<N;i++){
for(int j=0;j<i;j++){
if(v[j]<v[i]){
dp[i] = max(dp[i],dp[j]+1);
}
}
}
for(int i=0;i<N;i++){
ans = max(ans,dp[i]);
}
cout<<ans;
return 0;
}
'Algorithm > Softeer' 카테고리의 다른 글
강의실 배정 (0) | 2024.03.26 |
---|---|
수퍼바이러스 (1) | 2024.03.26 |
[HSAT 4회 정기 코딩 인증평가 기출] 슈퍼컴퓨터 클러스터 (C++) (0) | 2024.03.20 |
[HSAT 5회 정기 코딩 인증평가 기출] 성적 평가 (0) | 2024.03.20 |
[HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트 (0) | 2024.03.20 |