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

 

5557번: 1학년

문제 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만들��

www.acmicpc.net

더보기
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<int> arr;       
    unsigned long long prevv[101][21];        
    arr.resize(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
    }            
    for (int j = 0; j <= 20; j++) {
        prevv[1][j] = 0;
    }
    prevv[1][arr[1]] = 1;
    for (int i = 2; i < n; i++) {        
        for (int j = 0; j <= 20; j++) {            
            prevv[i][j] = 0;
        }
        for (int j = 0; j <= 20; j++) {
            if (prevv[i - 1][j] > 0) {
                if (j >= arr[i]) {
                    prevv[i][j - arr[i]] += prevv[i - 1][j];
                }
                if (j + arr[i] <= 20) {
                    prevv[i][j + arr[i]] += prevv[i - 1][j];
                }
            }
        }        
    }    
    cout << prevv[n - 1][arr[n]] << endl;
    return 0;
}