UVA - 10344 - 23 out of 5 (暴力)

来源:互联网 发布:图书数据哪个网站多 编辑:程序博客网 时间:2024/06/02 04:32

23 out of 5

题目传送:23 out of 5

解法:直接暴力,记得每次dfs调用都要回溯

AC代码:

#include <map>#include <set>#include <cmath>#include <deque>#include <queue>#include <stack>#include <cstdio>#include <cctype>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define INF 0x7fffffffusing namespace std;int a[5];int vis[5];bool dfs(int n, int ans) {    if(n >= 5) {        if(ans == 23) return true;        return false;    }    for(int i = 0; i < 5; i ++) {        if(!vis[i]) {            ans += a[i];            vis[i] = 1;            if(dfs(n + 1, ans)) return true;            vis[i] = 0;            ans -= a[i];            ans -= a[i];            vis[i] = 1;            if(dfs(n + 1, ans)) return true;            vis[i] = 0;            ans += a[i];            ans *= a[i];            vis[i] = 1;            if(dfs(n + 1, ans)) return true;            vis[i] = 0;            ans /= a[i];        }    }    return false;}int main() {    while(scanf("%d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4]) != EOF) {        if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0 && a[4] == 0) break;        memset(vis, 0, sizeof(vis));        int flag = 0;        for(int i = 0; i < 5; i ++) {            vis[i] = 1;            if(dfs(1, a[i])) {                flag = 1;                break;            }            vis[i] = 0;        }        if(flag == 1) {            printf("Possible\n");        }        else printf("Impossible\n");        }    return 0;}
0 0
原创粉丝点击