紧急求助,87分最后一个点怎么都TLE
  • 板块P1120 小木棍
  • 楼主lrxbf
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/17 11:37
  • 上次更新2023/11/3 03:11:33
查看原帖
紧急求助,87分最后一个点怎么都TLE
577187
lrxbf楼主2023/8/17 11:37
#include<bits/stdc++.h>
#define N 1000000+5
using namespace std;
int a[N],n,sum,m;
bool v[N];
bool cmp(int x,int y){
    return x>y;
}
bool dfs(int s,int t,int x,int y)
{
    if(s==m+1 && x==0)
        return true;
    else if(s==m+1)
        return false;
    else if(x==0)
{
        x=y;
        t=0;
    }
    for(int i=t+1;i<=m;i++)
{
        if(!v[i])
{
            if(x-a[i]>=0)
{
                v[i]=true;
                if(dfs(s+1,i,x-a[i],y))
                    return true;
                v[i]=false;
                if(a[i]==x||y==x)
                    break;
                while(a[i]==a[i+1])
                    i++;
            }
        }
    }
    return 0;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
{
        int x;
        scanf("%d",&x);
        if(x<=50)
{
            a[++m]=x;
            sum+=x;
        }
    }
    sort(a+1,a+1+m,cmp);
    for(int i=a[1];i<=sum;i++)
{
        if(sum%i==0)
{
            if(dfs(1,0,i,i))
{
                printf("%d\n",i);
                break;
            }
        }
    }
    return 0;
}
2023/8/17 11:37
加载中...