Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

jay153의 PS 일지

BOJ 14849 본문

BOJ

BOJ 14849

jay153 2025. 2. 21. 19:00

 

 

https://www.acmicpc.net/problem/14849

 

코드

http://boj.kr/bbf8635a8ab74ad7bfe625ff7021af42

 

난이도 : P2

 

Elapse Time : 90min

 

이 문제를 보고 $T=100$, $q=100$, $v=10^5$인 것이 먼저 눈이 들어왔다. $O(Tqv)$의 코드는 시간에 안 들어올 것이기 때문에 $c_1$, $c_2$, $c_3$, $c_4$를 입력받고 쿼리를 입력받기 전에 무언가를 미리 계산을 해놔야겠다는 생각을 했다. 동전을 무제한으로 사용 가능할 때 $x$를 만드는 경우의 수를 구해놓으면 쿼리 처리를 할 수 있을지 생각해 보았다. 쿼리에서는 동전 개수에 제한이 있는데 포함과 배제로 제한보다 많이 사용하는 경우를 빼주는 것은 동전 종류가 4가지밖에 안되기 때문에 빠르게 할 수 있기 때문에 가능하다. 동전을 무제한으로 사용 가능할 때 합으로 특정 값을 만드는 경우의 수를 구하는 것에서 FFT가 먼저 생각났다. $0\leq x\leq 10^5$인 $x$중 $v_i$에는 $c_i$의 배수들에 1을 넣고 나머지에는 0을 넣어 FFT를 해주면 특정 값을 만드는 경우의 수를 구할 수 있다. 시간복잡도도 $O(Tvlogv)$이기 때문에 아슬아슬하게 될 것 같았다. 하지만 FFT의 결과가 잘 나오지 않아 50분을 썼다. 실수 오차 때문인가 싶어 NTT로 바꿔서 계산했더니 맞는 값이 나왔다. 이후 쿼리를 처리하는 부분을 포함과 배제를 활용하여 짜주었더니 시간초과가 나왔다. NTT가 느리기 때문인 것 같아 NTT 말고 다른 방법을 찾아보았다. 다른 방법으로는 $dp$가 가능해 보였다. $dp$를 짤 때도 포함과 배제를 활용하여 $dp[x]=dp[x-c_i]-dp[x-c_i-c_j]+dp[x-c_i-c_j-c_k]-dp[x-c_1-c_2-c_3-c_4]$식을 세워 구하였다.

'BOJ' 카테고리의 다른 글

BOJ 30027  (0) 2025.02.21
BOJ 17050  (0) 2025.02.21
BOJ 1349  (0) 2025.02.21
BOJ 31879  (0) 2025.02.20
BOJ 24233  (0) 2025.02.19