how D
查看原帖
how D
895479
chenhanzheapple楼主2025/1/25 21:46

rt,听说爆搜能过,但是赛时TLE。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,cntc;
int a[15],t[15];
map<int,bool> vis;
void dfs(int x,int ans){
    if(x==n+1){
        vis[ans] = 1;
        return;
    }
    if(t[x]==2){
        dfs(x+1,ans^a[x]);
        return;
    }
    dfs(x+1,ans^a[x]);
    t[x] = 1;
    for(int i=x+1;i<=n;i++){
        if(t[i]!=1){
            int tmp = t[i];
            t[i] = 2;
            a[i]+=a[x];
            dfs(x+1,ans);
            a[i]-=a[x];
            t[i] = tmp;
        }
    }
    t[x] = 0;
}
signed main(){
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> a[i];
    }
    dfs(1,0);
    int cnt = 0;
    for(auto x:vis){
        cnt++;
//        cout << x.first << endl;
    }
    cout << cnt;
    return 0;
}

2025/1/25 21:46
加载中...