Language: C++

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

//INF
const long long INF = pow(10,9);

void chmin(int &a, int b){if (a > b) a = b;}

int N, A, B, C;
vector<int> L;

//再帰
//i は竹の添字
int rec(int i, int a, int b, int c)
{
    //竹をi=0-Nまで見終わったとき
    if(i==N)
    {
        if(!a || !b || !c) return INF;//a,b,cどれか1つでも0のときは竹をつかっていないのでNG
        return abs(a-A)+abs(b-B)+abs(c-C); //合体してできるa,b,cをA,B,Cにするコスト
    }

    //今ある竹を採用しない場合
    int res=rec(i+1,a,b,c);

    //A,B,Cに使う場合
    //(a?10:0)　は三項演算子
    //a==0のときのみFalseなので0,それ以外は10になる
    //これは最初の一本目だけは合体ではないのでコストが0であることを意味する
    chmin(res,rec(i+1,a+L[i],b,c)+(a?10:0));
    chmin(res,rec(i+1,a,b+L[i],c)+(b?10:0));
    chmin(res,rec(i+1,a,b,c+L[i])+(c?10:0));

    //再帰の途中経過を返す
    return res;
}

int main()
{
    cin >> N >> A >> B >> C;
    L.resize(N);
    for(int i=0;i<N;++i)cin>>L[i];

    cout << rec(0,0,0,0) << endl;
}






#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
void chmin(int &a, int b) { if (a > b) a = b; }

int N, A, B, C;
vector<int> L;
double INF=pow(10,9);

// 再帰
int rec(int i, int a, int b, int c) {
    if (i == N) {
        if (!a || !b || !c) return INF; // A, B, C いずれも竹は 1 本は必ず使ってないとダメ
        return abs(a - A) + abs(b - B) + abs(c - C); // 合体してできた a, b, c を A, B, C にするコスト
    }

    // 今ある竹を採用しない場合
    int res = rec(i+1, a, b, c);
    
    // A, B, C を使う場合。
    // (a ? 10 : 0) とかは、最初の 1 本目は合体コストなし、2 本目からはコスト 10 かかることを意味する
    chmin(res, rec(i+1, a + L[i], b, c) + (a ? 10 : 0));
    chmin(res, rec(i+1, a, b + L[i], c) + (b ? 10 : 0));
    chmin(res, rec(i+1, a, b, c + L[i]) + (c ? 10 : 0));
    
    return res;
}

int main() {
    // 入力
    cin >> N >> A >> B >> C;
    L.resize(N);
    for (int i = 0; i< N; ++i) cin >> L[i];
    
    // 再帰する
    cout << rec(0, 0, 0, 0) << endl;
}

Compiler output:
a.cc:59:6: error: redefinition of 'void chmin(int&, int)'
   59 | void chmin(int &a, int b) { if (a > b) a = b; }
      |      ^~~~~
a.cc:10:6: note: 'void chmin(int&, int)' previously defined here
   10 | void chmin(int &a, int b){if (a > b) a = b;}
      |      ^~~~~
a.cc:61:5: error: redefinition of 'int N'
   61 | int N, A, B, C;
      |     ^
a.cc:12:5: note: 'int N' previously declared here
   12 | int N, A, B, C;
      |     ^
a.cc:61:8: error: redefinition of 'int A'
   61 | int N, A, B, C;
      |        ^
a.cc:12:8: note: 'int A' previously declared here
   12 | int N, A, B, C;
      |        ^
a.cc:61:11: error: redefinition of 'int B'
   61 | int N, A, B, C;
      |           ^
a.cc:12:11: note: 'int B' previously declared here
   12 | int N, A, B, C;
      |           ^
a.cc:61:14: error: redefinition of 'int C'
   61 | int N, A, B, C;
      |              ^
a.cc:12:14: note: 'int C' previously declared here
   12 | int N, A, B, C;
      |              ^
a.cc:62:13: error: redefinition of 'std::vector<int> L'
   62 | vector<int> L;
      |             ^
a.cc:13:13: note: 'std::vector<int> L' previously declared here
   13 | vector<int> L;
      |             ^
a.cc:63:8: error: conflicting declaration 'double INF'
   63 | double INF=pow(10,9);
      |        ^~~
a.cc:8:17: note: previous declaration as 'const long long int INF'
    8 | const long long INF = pow(10,9);
      |                 ^~~
a.cc:66:5: error: redefinition of 'int rec(int, int, int, int)'
   66 | int rec(int i, int a, int b, int c) {
      |     ^~~
a.cc:17:5: note: 'int rec(int, int, int, int)' previously defined here
   17 | int rec(int i, int a, int b, int c)
      |     ^~~
a.cc:84:5: error: redefinition of 'int main()'
   84 | int main() {
      |     ^~~~
a.cc:41:5: note: 'int main()' previously defined here
   41 | int main()
      |     ^~~~