假设分配后已经相等(相加后具有相等初值),
然后依据条件从两个数组中剔除数据,若全部剔除后,两组剩下的数还是相等则认为可以实现
#include<stdio.h>


int solu(int N1,int N2,int arr[],int idx,int n);


int main(){
    int N1 = 0;
    int N2 = 0;
    
    int n;
    int arr[50];
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
        int idx = 0;
        int r = solu(N1,N2,arr,idx,n);
        if(r>0)
            printf("true");
        else
            printf("false");
            
    }
    
}

int solu(int N1,int N2,int arr[],int idx,int n){
    if(idx==n){
        if(N1==N2)
            return 1;
        else
            return 0;
    }
    else{
        if(arr[idx]%5==0){
            return solu(N1-arr[idx],N2,arr,idx+1,n);
        }
        else if(arr[idx]%3==0){
            return solu(N1,N2-arr[idx],arr,idx+1,n);
        }
        else{
            return solu(N1-arr[idx],N2,arr,idx+1,n)+solu(N1,N2-arr[idx],arr,idx+1,n);
        }
    }
}