比赛 国庆欢乐赛2 评测结果 TAWWWWTTTTTTTTTTTTTT
题目名称 毛一琛 最终得分 5
用户昵称 梦那边的美好CE 运行时间 46.633 s
代码语言 C++ 内存使用 3.43 MiB
提交时间 2025-10-04 11:54:36
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m[30],ans,idx,siz,vis[30];
vector<int>v(30);
int dfs(int l,int r){
//    cout<<"dfs:  "<<l<<"  "<<r<<endl;
//    cout<<"idx:  "<<idx<<endl;
    int suml=0,sumr=0;
    if(l==r)return v[l];
    if(r==l+1){
        if(v[l]==v[r]){
            ans++;
//            cout<<"相邻!"<<l<<" "<<r<<endl;
        }
        return v[l]+v[r];
    }
    //一个断点 
    for(int i=l;i<r;i++){
        suml=dfs(l,i);sumr=dfs(i+1,r);
        if(suml==sumr){
//            cout<<l<<" "<<r<<" "<<endl;
                for(int p=l;p<=r;p++){
//                    cout<<v[p]<<" ";
                }
            ans++;
            return suml+sumr;
        }
    }
    //2
    for(int i=l;i<r-1;i++){
        for(int j=i+1;j<r;j++){
            suml=dfs(l,i)+dfs(j+1,r);sumr=dfs(i+1,j);
            if(suml==sumr){
//                cout<<l<<" "<<r<<" "<<endl;
//                for(int p=l;p<=r;p++){
//                    cout<<v[p]<<" ";
//                }
//                cout<<endl;
                ans++;
                return suml+sumr;
            }
        }
    }
    int sum=0;
    for(int i=l;i<=r;i++)sum+=v[i];
    return sum;
}

void solve(int sizs,int l){
    if(sizs>=n)return;
    for(int i=l;i<=n;i++){
        if(!vis[i]){
            v[++idx]=m[i],vis[i]=1;
            dfs(1,idx);
            solve(sizs+1,l+1);
        }
    }
}

signed main(){
    freopen("subsets.in","r",stdin);freopen("subsets.out","w",stdout);
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//    v[1]=1;v[2]=2;v[3]=3;
//    dfs(1,3);
//    cout<<ans;
    cin>>n;
    bool lll=1;
    for(int i=1;i<=n;i++){
        cin>>m[i];
        if(m[1]!=m[i])lll=0;
    }
    if(lll){
        cout<<pow(2,n-1)-1;
        return 0;
    }
    if(n==1){
        cout<<0;
        return 0;
    }
    if(n==2){
        int ans=0;
        if(m[1]==m[2])ans++;
        cout<<ans;
        return 0;
    }
    sort(m+1,m+n+1);v.clear();
    solve(2,1);
    cout<<ans;
    return 0;
}