- toc {:toc}
ํ์ด
๊ท์น ์ฐพ๋ ๊ฒ์ด ํ๋ค๋ค. dp๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
1, 2, 3์ ์ฌ์ฉํ๊ณ k=3์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
| ์ฌ์ฉ ๋์ | 1 | 2 | 3 |
|---|---|---|---|
| 1์ | 1 | 1 | 1 |
| 2์ | 0 | 1 | 0 |
| 3์ | 0 | 0 | 1 |
| 1, 2์ | 1 | 2 | 2 |
| 1, 2, 3์ | 1 | 2 | 3 |
-
1์๋ง ์ฌ์ฉํด ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 1์ 1๊ฐ๋ฅผ ์ฌ์ฉํด 1์ ๋ง๋ค๊ธฐ
1์ 2๊ฐ๋ฅผ ์ฌ์ฉํด 2์ ๋ง๋ค๊ธฐ
1์ 3๊ฐ๋ฅผ ์ฌ์ฉํด 3์ ๋ง๋ค๊ธฐ -
2์์ ์ฌ์ฉํด ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 2์ 1๊ฐ๋ฅผ ์ฌ์ฉํด 2์ ๋ง๋ค๊ธฐ
2์ 1๊ฐ, 1์ 1๊ฐ๋ฅผ ์ฌ์ฉํด 3์ ๋ง๋ค๊ธฐ -
3์์ ์ฌ์ฉํด ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ 3์ 1๊ฐ๋ฅผ ์ฌ์ฉํด 3์ ๋ง๋ค๊ธฐ
2์, 3์์ ๊ฒฝ์ฐ ์ฌ์ฉ ๋์ ๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ ๋ง๋ค ์ ์๋ค.
3์์ ๋ง๋ค๋ ค๋ ๊ฒฝ์ฐ๋ 3์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, 2์ 1๊ฐ์ 1์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, 1์ 3๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ก ํ์ธํ ์ ์๋ค. ์ด๋ฅผ dp๋ก ์๊ฐํด๋ณด๋ฉด dp[3] = 1 ์ ๊ฒฝ์ฐ โ3์์ ๋ง๋ค๋ ค๋ ๊ฒฝ์ฐ์ ์๋ 1๊ฐโ๋ก ์๊ฐํ ์ ์๋ค.
- 3์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ dp[3] += dp[0] ์ผ๋ก ํํํ ์ ์๋ค. 3์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ์กด์ ์์ด์ผ ํ ๋์ ์ด ์๊ธฐ ๋๋ฌธ์ 0์ ์๋ ๊ฒฝ์ฐ๋ก ๊ตฌํํ๋ค.
- 2์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ dp[3] += dp[1] ๋ก ํํํ๋ค. 2์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ์กด์ 1์ 1๊ฐ๊ฐ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ 1์์ ๋ง๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ํด์ค๋ค.
- 1์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ dp[3] += dp[2] ๋ก ํํํ๋ค. 1์ 1๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ์กด์ 2์ 1๊ฐ๊ฐ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ 2์์ ๋ง๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ํด์ค๋ค.
๋๋ฌธ์ ํด๋น ๋์ ์ ์ฌ์ฉํด ๋ง๋ค๋ ค๋ฉด ๋ง๋ค๋ ค๋ ๋์ ์ ์์์ ํด๋น ๋์ ์ ๋นผ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
ex) 2์์ ์ด์ฉํด 3์์ ๋ง๋ค๋ ค๋ ๊ฒฝ์ฐ : dp[3 - 2]
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
int coin[105];
int dp[10005];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; i++){
cin >> coin[i];
}
dp[0] = 1;
for(int i = 1; i <= n; i++){
for(int j = coin[i]; j <= k; j++){
dp[j] = dp[j] + dp[j - coin[i]];
}
}
cout << dp[k] << endl;
return 0;
}