Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
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
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(2293) 동전 1 본문

백준 (C++)/Solve

(2293) 동전 1

dh-winternagi 2026. 4. 19. 23:11

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

단계별로 풀어보기

31단계(동적 계획법 2) 5번째

 

 

 

냅색 문제처럼 dp[a][b]를 a번째 종류의 동전까지 썼을 때 b원을 만드는 경우의 수로 두고 풀면 되는데... 메모리 제한이 빡빡하다.

대부분의 문제는 시간 복잡도만 고려하면 되지 공간 복잡도는 고려할 필요가 없지만, 이렇게 공간 복잡도를 고려해야 하는 경우가 있다.

그런데 이미 RGB거리평범한 배낭에서 필요없는 값을 저장하지 않고 메모리를 절약하는 테크닉에 대해 얘기한 적 있다.

차원 하나를 줄여 dp[b]를 b원을 만드는 경우의 수로 두고 풀면 된다.

 

 

 

#include <iostream>
#include <vector>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  
  int n, k;
  
  cin >> n >> k;
  
  vector<int> dp(k+1);
  
  dp[0]= 1;
  
  while(n--){
    int v;
    
    cin >> v;
    
    for(int i=k;i>=0;i--){
      if(!dp[i])  continue;
      
      for(int j=v;i+j<=k;j+=v){
        dp[i+j]+= dp[i];
      }
    }
  }
  
  cout << dp[k];
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(11062) 카드 게임  (0) 2026.04.19
(7579) 앱  (0) 2026.04.19
(2629) 양팔저울  (0) 2026.04.19
(1520) 내리막 길  (0) 2026.04.19
(11049) 행렬 곱셈 순서  (0) 2026.04.19