#include #include #include int n, k; int maxtime; char* req[100]; char* fix[100]; int ptime[100]; void go(int time, char* bugs) { int i, j; int flag; char* nbugs; if (time > maxtime) { free(bugs); return; } flag = 1; for (i = 0; i < n; i++) { if (bugs[i] == '+') flag = 0; } if (flag) { maxtime = time; free(bugs); return; } for (i = 0; i < k; i++) { flag = 1; for (j = 0; j < n; j++) { if (req[i][j] == '+' && bugs[j] == '-') flag = 0; if (req[i][j] == '-' && bugs[j] == '+') flag = 0; } if (flag) { nbugs = strdup(bugs); for (j = 0; j < n; j++) { if (fix[i][j] == '+') { nbugs[j] = '+'; } if (fix[i][j] == '-') { nbugs[j] = '-'; } } if (strcmp(bugs, nbugs)) { go(time + ptime[i], nbugs); } } } free(bugs); } int main() { FILE* f; int i; int count; char buf1[25], buf2[25]; f = fopen("bugs.in", "r"); for (count = 1;;count++) { fscanf(f, "%d %d ", &n, &k); if (n == 0 && k == 0) return 0; for (i = 0; i < k; i++) { fscanf(f, "%d %s %s ", &ptime[i], buf1, buf2); req[i] = strdup(buf1); fix[i] = strdup(buf2); } maxtime = 10000; go(0, strdup("++++++++++")); printf("Product %d\n", count); if (maxtime == 10000) printf("Bugs cannot be fixed.\n\n"); else printf("Fastest sequence takes %d seconds.\n\n", maxtime); } }