As some have said, this is NP, so for larger values of N it takes a very long time. For N=20 it runs quite quickly.
// True if some set of strengths from s[n] sum to t bool divide(unsigned int *s, int n, int t) { if (t == 0) return true; // We reached the goal if (n == 0) return false; // No people left to assign if (*s > t) return false; // Smallest person exceeds goal if (*s * n < t) return false; // Everyone else can not total to goal if (divide(s+1,n-1,t)) return true; // Consider not including first person in line return divide(s+1,n-1,t-*s); // Consider including first person in line } int main(int argc, char* argv[]) { const int MAX=50; int N; unsigned int strength[MAX]; int sum = 0; int i,j; printf("How many people are playing?"); scanf("%d",&N); for(i = 0; i < N; ++i) { printf("Enter strength of person %d:", i+1); scanf("%d", &strength[i]); sum += strength[i]; } if (sum % 2 == 1) { printf("NO\n"); } else { // Sort from high to low for(i = 0; i < N; ++i) for(j = 1; j < N; ++j) { if (strength[j] > strength[j-1]) { strength[j] ^= strength[j-1]; strength[j-1] ^= strength[j]; strength[j] ^= strength[j-1]; } } if (divide(strength+1,N-1,sum/2)) printf("YES\n"); else printf("NO\n"); } return 0; } On Jul 30, 4:44 am, sylvester <abeygau...@gmail.com> wrote: > input consists of N integers, separated by a space. The ith integer > indicates the strength of the ith person. > For each case, output "YES" if it is possible to pick some people from > the group and separate into two teams of equal strengths else "NO" -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.