๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #1182 ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ

by dar0m! 2019. 9. 4.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 256 MB 44.845 %

 

 

1182๋ฒˆ: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ณผ ์ •์ˆ˜ S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 100,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

N๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์žˆ์„ ๋•Œ, ํฌ๊ธฐ๊ฐ€ ์–‘์ˆ˜์ธ ๋ถ€๋ถ„์ˆ˜์—ด ์ค‘์—์„œ ๊ทธ ์ˆ˜์—ด์˜ ์›์†Œ๋ฅผ ๋‹ค ๋”ํ•œ ๊ฐ’์ด S๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1988 KB 4 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
 
int n, s, ans;
int arr[30];
void func(int idx, int sum) {
    if (n == idx) {
        if (s == sum) {
            ans++;
        }
        return;
    }
    func(idx + 1, sum + arr[idx]);
    func(idx + 1, sum);
}
int main() {
    scanf("%d%d",   n,   s);
    for (int i = 0; i < n; i++) {
        scanf("%d", arr[i]);
    }
    func(00);
    if (s == 0) ans--;
    printf("%d", ans);
 
    return 0;
}
cs

 

 

๋น„์Šทํ•˜์ง€๋งŒ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1116 KB 0 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int n,s,cnt,a[30];
 
void find(int i,int sum){
    if(sum+a[i]==s) cnt++;
    if(i==n-1return;
    find(i+1,sum); find(i+1,sum+a[i]);
}
 
int main(){
    scanf("%d %d",&n,&s);
    for(int i=0; i<n; i++){
        scanf("%d",&a[i]);
    }
    find(0,0);
    printf("%d",cnt);
}
cs

๋Œ“๊ธ€