洛谷p1120cai

#include
#include
using namespace std;
bool bb[256];
int n,a[256],sum,ss,ans;
inline int cmp(const int &x,const int &y)
{
    return x>y;
}
bool dfs(int now,int pre,int d)
{
    if(d==sum)
    {
        return 1;
    }
    if(now==0) 
    if(dfs(ans,1,d+1)==1) return 1;
    for(int i=pre;i<=n;++i)
        if(bb[i]==0&&a[i]<=now)
        {
            bb[i]=1;
            if(dfs(now-a[i],i+1,d)) return 1;
            bb[i]=0;
            if(now==a[i]||now==ans) return 0;   
            while(a[i+1]==a[i]) i++;        
    }
    return 0;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;++i)
    {
        cin>>a[i];
        if(a[i]>50) i--,n--;//删掉 
        else ss+=a[i];
    }
    sort(a+1,a+1+n,cmp);        
    for(int i=a[1];i<=ss;i++)  
    {
        if(ss%i==0) 
        {   ans=i;
            sum=ss/i;
            if(dfs(ans,1,0)==1) {cout<         }
    }
    return 0;
}

你可能感兴趣的:(洛谷p1120cai)