DOJ logoDOJ
Problems
Recently added problemsSaved problems
CategoriesDLCContestsGroupsTeamsBoard
Ranking
Solved Problem RankingStreak rankingDOJ Power ranking
Status
Call for TasksLoginRegister
DOJ logoDOJ

Community online judge with OI-style subtask scoring, Elo ratings, and Discord-backed certification.

Problems
ProblemsCategories
Community
ContestsRankingBoardNoticesHost an external contestGuide
Account
LoginRegisterJudge Status
Policy
Terms of ServiceDLC RulesPrivacyAPI documentationLanguage runtimesContest rank rewardsRating and performance
© 2026 DOJ
All rights reserved
Editorial

다다스의 부분수열

Back to problem

Editorial

먼저 하나의 수열 B=(b1,b2,…,bm)B=(b_1,b_2,\ldots,b_m)B=(b1​,b2​,…,bm​)에 대해 g(B)g(B)g(B)를 구하는 일반적인 DP를 생각하자.

dpi=max⁡(dpi−1,dpi−2+bi)dp_i=\max(dp_{i-1},dp_{i-2}+b_i)dpi​=max(dpi−1​,dp

로 둘 수 있다. 여기서 dpidp_idpi​는 앞 iii개의 원소만 고려했을 때의 답이다.

이제

di=dpi−dpi−1d_i=dp_i-dp_{i-1}di​=dpi​−dpi

라고 정의하자. 그러면

di=dpi−dpi−1=max⁡(dpi−1,dpi−2+bi)−dpi−1=max⁡(0,bi−(dpi−1−dpi−2))=max⁡(0,bi−di−

이다.

또한

dpm=d1+d2+⋯+dmdp_m=d_1+d_2+\cdots+d_mdpm​=d1​+d2​

이다. 따라서 모든 부분수열에 대한 g(B)g(B)g(B)의 합은, 모든 부분수열에서 각 원소가 추가될 때 생기는 ddd값의 합과 같다.

중요한 점은 1≤Ai≤101 \le A_i \le 101≤Ai​≤10이므로 모든 did_idi​도 00 이상 이하라는 것이다.

cnt[j]cnt[j]cnt[j]를 현재까지 본 원소들로 만들 수 있는 비어 있지 않은 부분수열 중, 마지막 ddd값이 jjj인 부분수열의 개수라고 하자.

새 원소 x=Aix=A_ix=Ai​를 처리할 때 새로 생기는 부분수열은 두 종류이다.

  • xxx 하나만 고른 부분수열: 이때 마지막 ddd값은 xxx이다.
  • 기존 부분수열 뒤에 xxx를 붙인 부분수열: 기존 마지막 ddd값이 jjj라면 새 마지막 dd값은 이다.

새로 생긴 모든 부분수열의 마지막 ddd값은 전체 답에 한 번씩 더해져야 한다. 그러므로 새로 만든 상태를 addaddadd에 모으면서

ans+=add[d]⋅dans \mathrel{+}= add[d]\cdot dans+=add[d]⋅d

를 해 주면 된다.

그 후 cnt[d]cnt[d]cnt[d]에 add[d]add[d]add[d]를 더하면, 다음 원소를 처리할 때 사용할 수 있다.

상태 수는 0,1,…,100,1,\ldots,100,1,…,10 총 111111개뿐이므로 각 원소마다 O(11)O(11)O(11)에 처리할 수 있다.

시간 복잡도는 O(11N)O(11N)O(11N), 메모리 복잡도는 O(11)O(11)O(11)이다.

i−2​
+
bi​)
−
1
​
1)\begin{aligned} d_i &=dp_i-dp_{i-1}\\ &=\max(dp_{i-1},dp_{i-2}+b_i)-dp_{i-1}\\ &=\max(0,b_i-(dp_{i-1}-dp_{i-2}))\\ &=\max(0,b_i-d_{i-1}) \end{aligned}
di​​=dpi​−dpi−1​=max(dpi−1​,dpi−2​+bi​)−dp=max(0,bi​−(dpi−1​−dpi−2​))=max(0,bi​−di−1​)​
+
⋯+
dm​
0
101010
d
max⁡(0,x−j)\max(0,x-j)max(0,x−j)
i−1​