https://www.acmicpc.net/problem/2550
2550번: 전구
첫 번째 줄에는 스위치의 수(전구의 수)를 나타내는 정수 N (1≤N≤10,000)이 주어진다. 두 번째 줄에는 N개의 스위치 번호들이 위에서부터 순서대로 빈칸을 사이에 두고 주어진다. 세 번째 줄에는 N
www.acmicpc.net
[난이도] Gold4
[유형] DP
[풀이]
LIS DP 알고리즘을 이용해서 풀 수 있다.
#include <cstdio> #include <vector> #include <algorithm> using namespace std; int N,a[10001],b[10001],c[10002],dp[10002]; pair<int,int> trc[10001]; int main(){ scanf("%d",&N); for(int i=1;i<=N;i++){ int v; scanf("%d",&v); a[v]=i; } for(int i=1;i<=N;i++) scanf("%d",&b[i]); for(int i=1;i<=N;i++) c[a[b[i]]]=i; vector<int> v; for(int i=1;i<=N;i++){ int j = lower_bound(v.begin(),v.end(),c[i])-v.begin(); if(j<v.size()) v[j]=c[i]; else v.push_back(c[i]); trc[i]={j,c[i]}; } int j=v.size()-1; vector<int> l; for(int i=N;i>0;i--){ if(trc[i].first==j){ l.push_back(trc[i].second); j--; } } printf("%d\n",l.size()); for(auto& p : l) p = b[p]; sort(l.begin(),l.end()); for(auto& p : l) printf("%d ",p); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/2550.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 20058 : 마법사 상어와 파이어스톰 (C++) (0) | 2021.02.14 |
---|---|
[BOJ/백준][Gold4] 12970 : AB (C++) (0) | 2021.02.14 |
[BOJ/백준][Gold4] 3908 : 서로 다른 소수의 합 (C++) (0) | 2021.02.06 |
[BOJ/백준][Gold4] 20040 : 사이클게임 (C++) (0) | 2021.02.06 |
[BOJ/백준][Gold4] 16172 : 나는 친구가 적다(large) (C++) (0) | 2021.02.06 |