第六章 ALDS1_5_A:Exhaustive Search 穷举搜索

来源:互联网 发布:淘宝把买家加入黑名单 编辑:程序博客网 时间:2024/06/05 05:53

问题链接

ALDS1_5_A:Exhaustive Search

问题内容

判断长度为n的数列A中任意几个元素相加能否得到m

思路

对于A的每一个元素都有“选”和“不选”的情况,由于n比较小,我们通过递归穷举每个元素选和不选的情况,当得到m就返回。

代码

#include<iostream>#include<cstdio>using namespace std;int n, A[30];// 递归穷举bool solve(int i, int m) {    // 已经找到得到m的组合方式    if (m == 0)        return true;    // 已经穷举过A的全部元素了    if (i >= n)        return false;    // 分别穷举 不选A[i] 和 选择A[i]的情况    return solve(i + 1, m) || solve(i + 1, m - A[i]);}int main(){    int t, M;    scanf("%d", &n);    for (int i = 0; i < n; i++) {        scanf("%d", &A[i]);    }    scanf("%d", &t);    for (int i = 0; i < t; i++) {        scanf("%d", &M);        if (solve(0, M))            printf("yes\n");        else            printf("no\n");    }    return 0;}
原创粉丝点击