https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=390&sw_prbl_sbms_sn=18384
Softeer
제한시간 : C/C++(1초), Java/Python(2초) | 메모리 제한 : 256MB 남북으로 흐르는 개울에 동서로 징검다리가 놓여져 있다. 이 징검다리의 돌은 들쑥날쑥하여 높이가 모두 다르다. 철수는 개울의 서쪽에서
softeer.ai
[난이도] level3
[유형] DP
[풀이]
LIS(Longest Increasing Subsequence) 다이나믹 프로그래밍 문제입니다.
돌계단의 높이가 높아지는 순서로 선택하고, 그 개수를 최대로 해야하기 때문입니다.
N 제한 3000이기 때문에 O(N^2) 시간복잡도 풀이로 해결이 가능합니다.
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int N,a[3001],dp[3001];
int sol(int n){
int& ret = dp[n];
if(ret!=-1) return ret;
ret=0;
for(int i=n+1;i<=N;i++)
if(a[n]<a[i]) ret=max(ret,1+sol(i));
return ret;
}
int main(){
scanf("%d",&N);
for(int i=1;i<=N;i++) scanf("%d",&a[i]);
memset(dp,-1,sizeof(dp));
printf("%d",sol(0));
}
https://github.com/has2/Problem-Solving/blob/master/softeer/level3/징검다리.cpp
'Problem-Solving > Softeer' 카테고리의 다른 글
[Softeer/소프티어][level3] 수퍼바이러스 (C++) (0) | 2021.10.04 |
---|---|
[Softeer/소프티어][level4] 징검다리2 (C++) (0) | 2021.10.04 |
[Softeer/소프티어][level3] 강의실 배정 (C++) (0) | 2021.10.04 |
[Softeer/소프티어][level4] H-클린알파 (C++) (0) | 2021.10.04 |
[Softeer/소프티어][level3] 성적 평균 (C++) (0) | 2021.10.04 |