全探索 整数を作れるかの問題

配列の要素から整数を作れるかを判定する関数

#include <bits/stdc++.h>
using namespace std;

static const int MAX_N = 1000;
int n;//配列Aの大きさ
int m;//判定する整数
int A[MAX_N];

bool solve(int i,int m){
    /*
        整数mが作れるか否かの再起関数
    */
    if(m==0)return true;
    if(i>=n)return false;
    return solve(i+1,m) || solve(i+1,m-A[i]);
}

int main()
{
    cin>>n;
    cout<<"判定する整数"<<endl;
    cin>>m;
    for(int i=0;i<n;i++){
        cin>>A[i];
    }
    cout<<(solve(0,m)?"possible":"impossible")<<endl;
    return 0;
}
bool solve(int i,int m){
    /*
        整数mが作れるか否かの再起関数
    */
    if(m==0)return true;
    if(i>=n)return false;
    bool res1 = solve(i+1,m);//A[i]を使わない
    bool res2 = solve(i+1,m-A[i]);//A[i]を使う
    bool res = res1 || res2;
    return res;
}