BOJ 2293. λμ  1
πββοΈ[Gold V] λμ  1 - 2293
μ±λ₯ μμ½
λ©λͺ¨λ¦¬: 2100 KB, μκ°: 0 ms
λΆλ₯
λ€μ΄λλ―Ή νλ‘κ·Έλλ°
μ μΆ μΌμ
2024λ  1μ 12μΌ 13:19:41
λ¬Έμ  μ€λͺ
nκ°μ§ μ’ λ₯μ λμ μ΄ μλ€. κ°κ°μ λμ μ΄ λνλ΄λ κ°μΉλ λ€λ₯΄λ€. μ΄ λμ μ μ λΉν μ¬μ©ν΄μ, κ·Έ κ°μΉμ ν©μ΄ kμμ΄ λλλ‘ νκ³ μΆλ€. κ·Έ κ²½μ°μ μλ₯Ό ꡬνμμ€. κ°κ°μ λμ μ λͺ κ°λΌλ μ¬μ©ν μ μλ€.
μ¬μ©ν λμ μ ꡬμ±μ΄ κ°μλ°, μμλ§ λ€λ₯Έ κ²μ κ°μ κ²½μ°μ΄λ€.
μ λ ₯
첫째 μ€μ n, kκ° μ£Όμ΄μ§λ€. (1 β€ n β€ 100, 1 β€ k β€ 10,000) λ€μ nκ°μ μ€μλ κ°κ°μ λμ μ κ°μΉκ° μ£Όμ΄μ§λ€. λμ μ κ°μΉλ 100,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ κ²½μ°μ μλ₯Ό μΆλ ₯νλ€. κ²½μ°μ μλ 231λ³΄λ€ μλ€.
πνμ΄
dpλ¬Έμ μλ€.
λ μ μκ³ λ¦¬μ¦μ μμ©ν λ¬Έμ λ‘ μ νμμ΄ μ€μνλ€.
μ νμμ λ€μκ³Ό κ°λ€.
dp[j] += dp[j - arr[i]];
μ νμμ μλ―Έλ jμμ λ§λ€ μ μλ κ²½μ°μ μ μ΄λ€.
μλ₯Ό λ€μ΄ μλμ κ°μ μμ λΌλ©΄
3 10
1
2
5
κ²°κ³Όλ 10μ΄μ¬μΌνλ€.
int n, k;
int dp[20000];
vector<int> arr;
void solve()
{
	cin >> n >> k;
	arr = vector<int>(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}
	sort(arr.begin(), arr.end());
	dp[0] = 1;
	for (int i = 0; i < n; ++i)
	{
		for (int j = arr[i]; j <= k; ++j)
		{
			dp[j] += dp[j - arr[i]]; // μ νμ
			cout << "j : " << j << " dp[" << j << "] : " << dp[j] << endl; // μ€κ° κ²°κ³Όλ₯Ό 보기 μν μ½λ
		}
	}
	cout << dp[k];
}
μμ κ°μ΄ μμ±νκ³ λ리면 μλμ κ°μ κ²°κ³Όκ° λμ¨λ€.
λ μ μκ³ λ¦¬μ¦μ΄ μ λλ‘ μ΄ν΄λλ€λ©΄ μ½κ² μκ±°κ°μλ° λ μ‘°κΈ μ΄λ €μ λ€..
πμ 체 μ½λ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int n, k;
int dp[20000];
vector<int> arr;
void solve()
{
	cin >> n >> k;
	arr = vector<int>(n);
	for (int i = 0; i < n; ++i)
	{
		cin >> arr[i];
	}
	sort(arr.begin(), arr.end());
	dp[0] = 1;
	for (int i = 0; i < n; ++i)
	{
		for (int j = arr[i]; j <= k; ++j)
		{
			dp[j] += dp[j - arr[i]];
			cout << "j : " << j << " dp[" << j << "] : " << dp[j] << endl;
		}
	}
	cout << dp[k];
}
int main() 
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	freopen("input.txt", "rt", stdin);
	solve();
	return 0;
}