K - Birthday Puzzlehttps://vjudge.csgrandeur.cn/problem/Gym-102267K
#include<bits/stdc++.h>
using namespace std;
int a[30];
int f[30];
long long ans=0;
int n;
void dfs(int idx,long long cnt)
{
ans+=cnt;
for(int i=idx;i<=n;i++)
{
if(f[i])continue;
else
{
f[i]=1;
dfs(i+1,cnt|a[i]);
f[i]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
dfs(1,0);
cout<<ans;
return 0;
}
//Full of love and hope for life
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stdio.h>
#include <queue>
using namespace std;
long long int sum=0,a;
int n[25];
void dfs(int x,long long int ans)//回溯
{
if(x>a)
{
return ;
}
int t;
for(int i=x;i<=a;i++)
{
t=ans|n[i];
sum+=t;
dfs(i+1,t);//回溯
}
}
int main()
{
cin >> a;
for(int i=1;i<=a;i++)
{
cin >> n[i];
}
dfs(1,0);
cout << sum;
return 0;
}