题解 | 神奇的口袋

#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-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
asdasdasda...:19岁,不容易啊可能升个本会好点,现在学历歧视太严重了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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