1 条题解

  • 0
    @ 2025-10-5 10:41:10
    • 暴力枚举一半
    #include <bits/stdc++.h>
    using namespace std;
    
    using i64 = long long;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
        
        int n, k;
        cin >> n >> k;
        vector<int> c(n);
        for (int i = 0; i < n; i++) cin >> c[i];
        
        int na = n / 2;
        set<i64> a;
        for (int st = 0; st < (1 << na); st++) {
            long long s = 0;
            for (int i = 0; i < na; i++) if ((st >> i) & 1) s += c[i];
            a.insert(s);
        }
        
        int nb = n - na;
        set<i64> b;
        for (int st = 0; st < (1 << nb); st++) {
            long long s = 0;
            for (int i = 0; i < nb; i++) if ((st >> i) & 1) s += c[na + i];
            b.insert(s);
        }
        
        // cout << "a= " << '\n';
        // for (LL x: a) cout << x << ' ';
        // cout << '\n';
        
        // cout << "b= " << '\n';
        // for (LL x: b) cout << x << ' ';
        // cout << '\n';
        
        bool ok = false;
        for (i64 x: a) if (b.count(k - x)) {
            ok = true;
            break;
        }
        cout << (ok ? "Yes" : "No") << '\n';
        return 0;
    }
    
    • 1

    信息

    ID
    149
    时间
    100ms
    内存
    32MiB
    难度
    10
    标签
    递交数
    4
    已通过
    3
    上传者