87分,最后一个点TLE,求优化
查看原帖
87分,最后一个点TLE,求优化
848964
hzoi_Shadow楼主2023/1/3 07:55
#include<bits/stdc++.h>
using namespace std;
int a[1005],cnt,n,sum=0;
bool vis[1005];
static inline int read()
{
	int x=0,f=1;
	char s=getchar();
	while(s<'0'||s>'9')
	{
		if(s=='-')
		{
			f=-1;
		}
		s=getchar();
	}
	while(s>='0'&&s<='9')
	{
		x=(x<<1)+(x<<3)+(s^48);
		s=getchar();
	}
	return x*f;
}
static inline bool cmp(int x,int y)
{
    return x>y;
}
static inline bool dfs(int k,int step,int rest,int len)
{
	int i;
    if(k==n+1&&rest==0)
    {
	    return true;
	}
	    else
	    {
	    	if(k==n+1)
	    	{
	    		return false;
			}
			else
			{
				if(rest==0)
				{
					rest=len;
			        step=0;
			    }
			}
		}
    for(i=step+1;i<=n;i++)
	{
        if(vis[i]==0)
		{
            if(rest-a[i]>=0)
			{
                vis[i]=true;
                if(dfs(k+1,i,rest-a[i],len))
                {
				    return true;
				}
                vis[i]=false;
                if(a[i]==rest||len==rest)
                {
				    break;
                }
				while(a[i]==a[i+1])
                {
				    i++;
				}
            }
        }
    }
    return false;
}
int main()
{
    int i;
	n=read();
    for(i=1;i<=n;++i)
	{
		a[i]=read();
        sum+=a[i];
    }
    sort(a+1,a+1+n,cmp);
    for(i=a[1];i<=sum;++i)
	{
        if(sum%i==0)
		{
            if(dfs(1,0,i,i))
			{
				printf("%d",i);
                break;
            }
        }
    }
    return 0;
}
2023/1/3 07:55
加载中...