 /**//*
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;
}

|