题意: 解法: 观察到n只有20,那么二进制枚举出数组的所有划分情况, 对每种划分都计算一次权值,那么其中最小的权值就是答案. code: #include<bits/stdc++.h> #define int long long using namespace std; const int maxm=1e6+5; int a[maxm]; int n; void solve(){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } int ans=-1; for(int i=0;i<(1<<n);i++){ int last=a[0];; int temp=0; for(int j=1;j<n;j++){ if((i>>j&1)==(i>>(j-1)&1)){ last|=a[j]; }else{ temp^=last; last=a[j]; } } temp^=last; if(ans==-1)ans=temp; else ans=min(ans,temp); } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(0); solve(); return 0; }