본문 바로가기

백준 문제 풀이34

[백준 9998] 블록 쌓기 https://acmicpc.net/problem/9998 해설 파라메트릭 서치를 이용하면 금방 풀 수있다. f(x) 식 : sum += abs(y[i] - (h + abs(n / 2 + 1 - i))) + abs(d[i] - (h + abs(n / 2 + 1 - i))); ··· 소스코드 #include using namespace std; typedef long long int ll; ll n; ll y[300001], d[300001]; ll f(ll h) { ll sum = 0; for(int i=1; i> n; for (int i = 1; i > y[i]; for (int i = 1; i > d[i]; ll lo=0, hi=1e12+1, h; while (lo < hi - 1) { h = (lo.. 2020. 4. 22.
[백준 2568] 전깃줄 - 2 https://www.acmicpc.net/problem/2568 해설 일단, https://www.acmicpc.net/problem/14003 이 문제랑 https://www.acmicpc.net/problem/2565 랑 거의 유사하다. 이 문제 안에는 저 두문제가 섞인 문제임에도 골드 2다. 14003은 골드 1이고 문제는 비슷하게 풀리는 데 왜 그런지 잘 모르겠다. 그전에 풀었던 두 문제의 짬뽕이기 때문에 이번에는 해설을 진행하지 않겠다. ˙˙˙ 소스코드 #include #include #include #include using namespace std; int n; int p[1000001]; vector arr; vector memo; vector vp; int main() {.. 2020. 4. 2.
[백준 14003] 가장 긴 증가하는 부분 수열 5 https://www.acmicpc.net/problem/14003 해설 이번 문제는 LIS의 끝판왕 가장 긴 증가하는 수열 5 문제이다. 역시 쉽지 않았다. https://far-simple.tistory.com/43 전에 썼던 이 방법을 사용했다. ˙˙˙ 소스코드 #include #include #include using namespace std; int n, arr[1000001], p[1000001], cnt; vector ans, print; int main(){ cin >> n; for (int i = 1; i > arr[i]; ans.push_back(arr[1]); for (int i = 2; i = 0; i--) cout 2020. 4. 2.
[백준 12015] 가장 긴 증가하는 부분 수열 2 https://www.acmicpc.net/problem/12015 해설 이번 문제는 LIS 문제인데, 내가 아는 LIS 소스코드와 다르게 풀어야 해서 한번 가져와봤다. 좀 고급 LIS 느낌이다. #include #include using namespace std; int dp[1001]; int num[1001]; int main() { int n; cin >> n; for (int i = 0; i > num[i]; int res = -1; for (int i = 0; i < n; i++) { dp[i] = 1; for (int j = 0; j < i; j++) if (num[j] < num[i]) dp[i] = max(dp[i], dp[j] + 1); res = max(re.. 2020. 4. 2.