Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

BESTEST ALGORITHM

Name: Anonymous 2009-01-17 21:20

For this problem???

Get a list of numbers from user or file.  There may be only 1 number or their could be thousands.

Then determine whether any subset of this set of numbers sums up to 0.

Name: Anonymous 2009-01-18 15:20

bool subsetsum(int *xs, int n) {
    int neg = 0, pos = 0;
    for (int i = 0; i < n; i++) {
        if (xs[i] < 0) {
            neg += xs[i];
        } else {
            pos += xs[i];
        }
    }

    int *p = calloc(pos - neg + 1, sizeof(*p));
    int *q = calloc(pos - neg + 1, sizeof(*q));
    for (int i = 0; i < n; i++) {
        for (int j = neg; j <= pos; j++) {
            q[j - neg] = j == xs[i]
                || p[j - neg]
                || neg <= j - xs[i] && j - xs[i] <= pos && p[j - xs[i] - neg];
        }
        int *t = p; p = q; q = t;
    }

    bool ret = p[-neg];
    free(p);
    free(q);
    return ret;
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List