본문 바로가기
알고리즘/구름

[ 구름 / DFS ] 양팔 저울

by 뎁꼼 2020. 6. 29.

1. 문제


 

 

17610번: 양팔저울

무게가 서로 다른 k개의 추와 빈 그릇이 있다. 모든 추의 무게는 정수이고, 그릇의 무게는 0으로 간주한다. 양팔저울을 한 번만 이용하여 원하는 무게의 물을 그릇에 담고자 한다. 주어진 모든 추

www.acmicpc.net

 

2. 소스코드


 

#include <iostream>
#include <vector>
using namespace std;
vector <bool> weigh(2600001, false);
int k;
void dfs(int a[], int p, int sum)
{
    if (p > k)
    {
        if (sum < 0) return;
        weigh[sum] = true;
    }
    else
    {
        dfs(a, p + 1, sum - a[p]);
        dfs(a, p + 1, sum);
        dfs(a, p + 1, sum + a[p]);
    }
}
int main()
{
    int x = 0;
    cin >> k;
    int v[15];
    for (int i = 1; i <= k; i++)
    {
        cin >> v[i];
        x += v[i];
    }
    dfs(v, 1, 0);
    int y = 0;
    for (int i = 1; i <= x; i++)
        if (!weigh[i]) y++;
    cout << y;
}