79pts求救
查看原帖
79pts求救
305073
MZAutomata楼主2021/4/13 20:42

本蒟蒻现在才发现在玄学剪枝题里最可怕的其实是没有一个点TLE但是一堆WA QwQ

输入

31
1 7 32 34 39 25 26 59 2 28 36 61 28 31 49 49 3 27 21 17 51 51 17 39 3 45 30 35 18 46 56

输出

86

我的输出

172
#include<bits/stdc++.h>
int n,mn,sum,m,len,a[100];
bool usd[100];
namespace stick
{
	bool cmp(int a,int b)
	{
		return a>b;
	}
	void dfs(int k,int last,int ms)
	{
		if(!k)
		{
			printf("%d",len);
			exit(0);
		}
		int i,j;
		if(!ms)
		{
			for(i=1;i<=n;i++)
			  if(!usd[i])
				{
					usd[i]=true;
					break;
				}
			dfs(k-1,i,len-a[i]);
			return;
		}
		for(i=last+1;i<=n;i++)
		  if(!usd[i]&&ms>=a[i])
			{
				usd[i]=true;
				dfs(k,i,ms-a[i]);
				usd[i]=false;
				for(j=i;a[i]==a[j]&&j<n;j++);
				if(j>=n)
				  return;
			}
	}
}
using namespace stick;
int main()
{
	scanf("%d",&n);
	for(int i(1),x;i<=n;i++)
	{
		scanf("%d",&x);
		if(x>50)
		  continue;
		a[i]=x;
		mn=a[i]>mn?a[i]:mn;
		sum+=a[i];
	}
	std::sort(a+1,a+n+1,cmp);
	for(int i=mn;i<=sum;i++)
	  if(!(sum%i))
		{
			memset(usd,false,sizeof(usd));
			usd[1]=true;
			len=i,m=sum/i;
			dfs(m,1,len-a[1]);
		}
	return 0;
}

各位dalao帮忙调调吧蟹蟹了QwQ

2021/4/13 20:42
加载中...