#include #include int N; int Total; int *A = 0; char *Op = 0; int max_chk(int i, int total) { int rc; if (total <= Total) { if (A[i+1] == 1) { total += A[i+1]; } else { total *= A[i+1]; } if (i < N-2) { rc = max_chk(i+1, total); } else { rc = total; } } else { rc = total; } return rc; } int add(int i, int total) { int rc = 0; if (i < N-1) { total += A[i+1]; Op[i] = '+'; Op[i+1] = '\0'; if (total == Total) { if (i == N-2) { rc = 1; } else if (1 == mul(i+1, total)) { rc = 1; } else { rc = 0; } } else if (total < Total) { if (Total <= max_chk(i+1, total)) { if (1 == add(i+1, total)) { rc = 1; } else if (1 == mul(i+1, total)) { rc = 1; } else { rc = 0; } } else { rc = 0; } } else { rc = 0; } } return rc; } int mul(int i, int total) { int rc = 0; if (i < N) { total *= A[i+1]; Op[i] = '*'; Op[i+1] = '\0'; if (total == Total) { if (i == N-2) { rc = 1; } else if (1 == mul(i+1, total)) { rc = 1; } else { rc = 0; } } else if (total < Total) { if (Total <= max_chk(i+1, total)) { if (1 == add(i+1, total)) { rc = 1; } else if (1 == mul(i+1, total)) { rc = 1; } else { rc = 0; } } else { rc = 0; } } else { rc = 0; } } return rc; } int main() { int i; scanf("%d", &N); scanf("%d", &Total); A = (int*)malloc(sizeof(int)*N); for (i=0; i