https://www.acmicpc.net/problem/1182

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 

JW

 

#include "bits/stdc++.h"
using namespace std;
//부분수열의 합
int arr[20], n, m, cnt;

void recursive(int start, int level, int sum) {
    if (start == level && sum == m) {
        cnt++;
    }
    for (int i=start; i<n; i++) {
        recursive(i+1, level, sum+arr[i]);
    }
}

int main() {
    cin >> n >> m;
    for (int i=0; i<n; i++) {
        cin >> arr[i];
    }
    for (int i=1; i<=n; i++) {
        recursive(0, i, 0);
    }
    printf("%d", cnt);
}

'정보올림피아드-KOI > BOJ' 카테고리의 다른 글

백준 - 암호만들기  (0) 2022.03.19
백준 - 퇴사  (0) 2022.03.19
백준 - 로또  (0) 2022.03.19
백준 숫자카드 - 이분탐색  (0) 2022.03.18
백준 1,2,3 더하기 (브루트 포스)  (0) 2022.03.18

 

 

https://www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

#include "bits/stdc++.h"
using namespace std;
// 일곱 난쟁이
int main() {
    int height[9], sum = 0;
    for (int i=0; i<9; i++) {
        cin >> height[i];
        sum += height[i];
    }
    sort(height, height+9);
    for (int i=0; i<8; i++) {
        for (int j=i+1; j<9; j++) {
            if (sum - height[i] - height[j] == 100) {
                for (int k=0; k<9; k++) {
                    if (k == i || k == j) continue;
                    printf("%d\n", height[k]);
                }
                return 0;
            }
        }
    }
}

'정보올림피아드-KOI > BOJ' 카테고리의 다른 글

백준 1,2,3 더하기 (브루트 포스)  (0) 2022.03.18
백준 숨바꼭질 4 (역추적)  (0) 2022.03.14
백준 2×n 타일링 2  (0) 2022.03.14
백준 꿀따기 21758번 (11점 )  (0) 2022.03.11
백준 균형잡힌 세상  (0) 2022.03.07

+ Recent posts