#include <iostream>
#include <vector>
 
int main() 
{
	int n = 0;
	int k = 0;
 
	std::cin >> n >> k;
	std::vector<int> arr(n, 0);
	std::vector<int> dp(k + 1, 0);
 
	for (int i = 0; i < n; ++i)
	{
		std::cin >> arr[i];
	}
 
	// 동전 아무것도 선택 X
	dp[0] = 1;	
 
	for (int i = 0; i < n; ++i) 
	{
		int iNumber = arr[i];
 
		for (int j = iNumber; j <= k; ++j)
		{
			// arr[i] 만큼 차이나는 것을 추가로 입력 
			// arr[i]가 2일 경우 3 -> 5 // 5 -> 7 이런 갯수를 추가로 계속해서 입력
			dp[j] += dp[j - iNumber];
		}
	}
 
	std::cout << dp[k];
 
	return 0;
}

1. dp에 arr[i]만큼 차이나는 것들로 채운다.

2. arr[i]가 가능한 만큼 더해준다.

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 2294 동전2  (0) 2022.05.04
[C++] 백준 9461번 파도반 수열  (0) 2022.05.04
[C++] 백준 9465번 스티커  (0) 2022.05.03
[C++] 백준 2579번 계단오르기  (0) 2022.05.02
[C++]백준 22233번 가희와키워드  (0) 2022.04.30

+ Recent posts