[BOJ S2][C++] λ°±μ€ 1182λ²: λΆλΆμμ΄μ ν© (58%)
https://www.acmicpc.net/problem/1182
1182λ²: λΆλΆμμ΄μ ν©
첫째 μ€μ μ μμ κ°μλ₯Ό λνλ΄λ Nκ³Ό μ μ Sκ° μ£Όμ΄μ§λ€. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) λμ§Έ μ€μ Nκ°μ μ μκ° λΉ μΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. μ£Όμ΄μ§λ μ μμ μ λκ°μ 100,000μ λμ§ μλλ€.
www.acmicpc.net
λ¬Έμ
Nκ°μ μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ μμ λ, ν¬κΈ°κ° μμμΈ λΆλΆμμ΄ μ€μμ κ·Έ μμ΄μ μμλ₯Ό λ€ λν κ°μ΄ Sκ° λλ κ²½μ°μ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μ μμ κ°μλ₯Ό λνλ΄λ Nκ³Ό μ μ Sκ° μ£Όμ΄μ§λ€. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) λμ§Έ μ€μ Nκ°μ μ μκ° λΉ μΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. μ£Όμ΄μ§λ μ μμ μ λκ°μ 100,000μ λμ§ μλλ€.
μΆλ ₯
첫째 μ€μ ν©μ΄ Sκ° λλ λΆλΆμμ΄μ κ°μλ₯Ό μΆλ ₯νλ€.
νμ΄
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int n, s, ans;
vector<int> v;
vector<bool> used;
void recur(int sum, int index) {
if(index==n) {
if(sum==s)
ans++;
return;
}
recur(sum, index+1);
recur(sum+v[index], index+1);
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin >> n >> s;
v.assign(n, 0);
used.assign(n, false);
for(int i=0; i<n; i++)
cin >> v[i];
recur(0, 0);
if(s==0)
ans--;
cout << ans;
return 0;
}
/*
*/
λ§μ½ 58%μμ νλ Έμ΅λλ€ κ° λ¬λ€λ©΄
sκ° 0μΈ κ²½μ° κ³΅μ§ν©λ μΉ΄μ΄νΈν건 μλμ§ μ²΄ν¬ν΄λ³΄μ