/*
回溯法 最坏情况:5!*3^4
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX = 5;
const int OPTS = MAX-1; //操作符个数
int A[MAX];
int dfs(int cur, int sum)
{
if(cur == OPTS) {
if(sum == 23) return 1;
else return 0;
}
if(dfs(cur+1, sum+A[cur+1])) return 1;
if(dfs(cur+1, sum-A[cur+1])) return 1;
if(dfs(cur+1, sum*A[cur+1])) return 1;
return 0;
}
int main(void) {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
while(scanf("%d",&A[0])==1 && A[0]!=0) {
for(int i=1; i<5; i++) {
scanf("%d", &A[i]);
}
sort(A, A+MAX);
int found = 0;
do{
if(dfs(0, A[0])) {
found = 1;
break;
}
}while(next_permutation(A, A+MAX));
if(found) printf("Possible\n");
else printf("Impossible\n");
}
return 0;
}
UVa 10344 23 out of 5
最新推荐文章于 2018-08-21 08:13:48 发布