반응형

문제

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


역시 dp는 어렵다 ㅠㅠ 

개인적으로 표를 그리면서 차근차근 푸는것을 추천한다.

예제와 같이 1,2,5원 동전이 있고 10원을 만든다고 가정하면

1원 = 1

2원 = 1+1

   2

3원 = 1+1+1

   2+1

4원 = 1+1+1+1

   2+1+1

   2+2

5원 = 1+1+1+1+1

   1+1+1+2

   1+2+2

   5


이것은 풀어쓰면 dp[5]를 구하는 방법은 dp[1]+dp[2]+dp[0] 인 것을 알 수 있다.

dp[i]라고 가정하면 [i-동전]을 더해주는 방식이다. 처음에 이해가 되지 않아 표를 3번 이상 그려보면서 이해한 문제

시간이 지나면 또 까먹을 듯 하다.



#define _CRT_SECURE_NO_WARNINGS


#include <cstdio>

#include <iostream>

#include <algorithm>

#include <queue>

#include <stack>

#include <vector>

#include <functional>


#define MAX_SIZE 100

#define INF 0x7fffffff


using namespace std;


int N, K;

int coin[MAX_SIZE];

int dp[10001];


void solve()

{

dp[0] = 1;

scanf("%d %d", &N, &K);

for (int i = 0; i < N; i++)

scanf("%d", &coin[i]);


for (int i = 0; i < N; i++) {

for (int j = coin[i]; j <= K; j++) {

if (j - coin[i] >= 0)

dp[j] += dp[j - coin[i]];

}

}

printf("%d\n", dp[K]);

}


int main(void)

{

solve();

return 0;

}



반응형

'Algorithm' 카테고리의 다른 글

[카카오 2019 신입공채 1차 코딩테스트] 6.매칭 점수  (0) 2018.11.14
[프로그래머스] K번째 수  (0) 2018.11.14
[BOJ 2309] 일곱 난쟁이  (0) 2018.11.12
[BOJ 3053] 택시 기하학  (0) 2018.11.12
[BOJ 6591] 이항 쇼다운  (0) 2018.11.12

+ Recent posts