Language: C++

#include<iostream>
#include<bitset>
#include<string>
#include<cmath>
#include<vector>
#include<tuple>
using namespace std;
//# Functions for Vector/Matrix
template <typename T>
vector<T> zeros(int length){
    vector<T> vec(length, 0);
    return vec;
}
template <typename T>
vector<vector<T>> zeros(tuple<int, int> dim){
    vector<vector<T>> mat(get<0>(dim), vector<T>(get<1>(dim), 0));
    return mat;
}
//constant
//--------------------------------------------
const double EPS = 1e-10;
const double PI  = acos(-1.0);
//debug
#define dump(x)  cerr << #x << " = " << (x) << endl
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl
#define VARNAME(VariableName) # VariableName
template <typename T>
void show(vector<T> &vec){
    cerr << VARNAME(vec) << ": " << endl;
    for (auto value : vec) {
        cerr << value << " ";
    }
    cerr << endl;
}
template <typename T>
void show(vector<vector<T>> &mat){
    for (auto vec : mat) {
        show(vec);
    }
}
//typedef
//------------------------------------------
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef pair<int, int> PII;
typedef long long LL;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define SORT(a) sort(ALL(a))
#define RSORT(a) sort(RALL(a))
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
bool iseven(int x){ return x % 2 == 0; }
bool isodd(int x){ return !iseven(x); }
int dist(int x, int y) { return abs(x - y);}
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}
int main(){
	// cin.tie(0);
   	// ios::sync_with_stdio(false);
    // N: マッチ本数、M: 使える数字のパターン数
    // Ex. 20 4
    int N, M; cin >> N >> M;
    // A: 使える数字の集合
    // Ex. 3 7 8 4
    VI A(M); REP(i, M) cin >> A[i];
    RSORT(A);
    show(A);
    // 各数字を作るのに必要なマッチの本数。0はダミー
    //           1,2,3,4,5,6,7,8,9
    VI cost = {0,2,5,5,4,5,6,3,7,6};
    // ちょうど i 本のマッチ棒を使って、条件を満たす整数を作るときの最大桁数
    VI dp(N+1, (int)-1e9);
    dp[0] = 0;
    FOR(i, 1, N+1){
        for(auto& j: A){
            // i本のマッチで作れる整数の最大桁数は
            // j ∈Aを使ってdp[i - cost[j]]桁から一桁増やした場合
            // をすべてのjについて比較することで得られる
            if(i - cost[j] >= 0) dp[i] = max(dp[i], dp[i - cost[j]]+1);
        }
    }
    // N本のマッチを使って得られる最大の桁数dp[N]に以下に数字を配置していくかを解く
    // 単純に逆順ソートされている数字を上から走査して，使えるものを使えば良い
    int n = N; // 残りマッチ本数
    string ans; // 出力する整数
    while(n > 0){
        // n本のマッチから何本か使って作れる最大の数字を調べる
        int a; // 各桁で使う数字
        for(auto& j: A){
            // 数字jを使って，一桁分の数字を作れるかを判定
            if((n - j >= 0) and (dp[n - cost[j]] == dp[n] - 1)){
                a = j;
                break;
            }
        }
        n -= cost[a];
        ans += '0' + a;
    }
    cout << ans;
    return 0;
}



Compiler output:
a.cc: In function 'int main()':
a.cc:53:18: error: 'sort' was not declared in this scope; did you mean 'sqrt'?
   53 | #define RSORT(a) sort(RALL(a))
      |                  ^~~~
a.cc:71:5: note: in expansion of macro 'RSORT'
   71 |     RSORT(A);
      |     ^~~~~