/**//* PROG: milk3 LANG: C */ #include<stdio.h> #define max 20 typedef struct N { int a[3]; }N; int M[max][max][max], W[max], s[3]; N set(int i, int j, int k) { N h; h.a[0] = i; h.a[1] = j; h.a[2] = k; return h; } N pour(N h, int i, int j) { int w; w = h.a[i]; if (w + h.a[j] > s[j]) { w = s[j] - h.a[j]; } h.a[i] -= w; h.a[j] += w; return h; } void search(N h) { if (M[h.a[0]][h.a[1]][h.a[2]]) { return; } M[h.a[0]][h.a[1]][h.a[2]] = 1; if (h.a[0] == 0) { W[h.a[2]] = 1; } int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (i != j) { search(pour(h, i, j)); } } } }
int main() { //FILE * fin = fopen("milk3.in", "r"); //FILE * fout = fopen("milk3.out", "w"); int i, k, j; for (i = 0; i < 3; i++) { scanf( "%d", &s[i]); } for (i = 0; i < max; i++) { W[i] = 0; for(j = 0; j < max; j++) { for (k = 0; k < max; k++) { M[i][j][k] = 0; } } } search(set(0, 0, s[2])); for (i = 0; i <= s[2]; i++) { if (W[i] && j) { printf( "%d", i); j = 0; } else if (W[i]) { printf( " %d", i); } } printf( "\n"); system("pause"); return 0; }
|