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



京公网安备 11010502036488号