๐Ÿ• Baaaaaarking/0x0C๊ฐ• - ๋ฐฑํŠธ๋ž˜ํ‚น

[BOJ S2][C++] ๋ฐฑ์ค€ 1182๋ฒˆ: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ (58%)

์„ ๋‹ฌ 2022. 7. 7. 02:50
๋ฐ˜์‘ํ˜•

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์ธ ๊ฒฝ์šฐ ๊ณต์ง‘ํ•ฉ๋„ ์นด์šดํŠธํ•œ๊ฑด ์•„๋‹Œ์ง€ ์ฒดํฌํ•ด๋ณด์ž

๋ฐ˜์‘ํ˜•