实验一-递归

#include<iostream>
using namespace std;
int ans;
void dfs(int pos,int n,int *a,int *b){
    if(pos>n){
        int ans_now=0,num=0;
        for(int i=1;i<=n;i++)
            if(b[i]==1){
                num++;
                ans_now+=num*a[i];
            }
        ans^=ans_now;
        return;
    }
    dfs(pos+1,n,a,b);
    b[pos]=1;
    dfs(pos+1,n,a,b);
    b[pos]=0;
}
int main(){
    int n,*a,*b,*v;
    cin>>n;
    a=new int[n+1];
    b=new int[n+1];
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[i]=0;
    }
    dfs(1,n,a,b);
    cout<<ans<<endl;
    delete []a;
    delete []b;
    return 0;
}
1-1 P1001 子集的价值

相关文章: