题解 | 神奇的口袋

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int sum = 0;
bool b[30];
void dfs(int a[], int n, int cur, int pos) {
    if (cur == 40) {
        sum++;
        return ;
    }
    for (int i = pos; i < n; i++) {
        if (b[i] && a[i] + cur > 40)continue;
        b[i] = true;
        if (cur + a[i] <= 40) {
            dfs(a, n, cur + a[i], i + 1);
        }
        b[i] = false;
    }
}
int main() {
    int n;
    cin >> n;
    int a[30];

    memset(b, false, sizeof(b));
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, a + n);
    dfs(a, n, 0, 0);
    cout << sum << endl;
}

全部评论

相关推荐

06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务