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 |