#4 TLE 75分求调
查看原帖
#4 TLE 75分求调
557969
C选手n号楼主2022/10/3 21:46

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int N,K,mx,a[16],ans[16];
int lx()
{
	int dp[1005];
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=K;i++)
	{
		dp[a[i]]=1;
	}
	for(int i=1;i<=230;i++)
	{
		for(int k=1;k<=K;k++)
		{
			
			if(dp[i] && dp[i]<N && dp[i+a[k]])
			{
				dp[i+a[k]]=min(dp[i]+1,dp[i+a[k]]);
			}
			else if(dp[i] && dp[i]<N)
			{
				dp[i+a[k]]=dp[i]+1;
			}
		}
	}
	int sum=1,f=0;
	while(dp[sum])
	{
		sum++;
	}
	/*for(int i=1;i<=10;i++)
	{
		printf("%d ",dp[i]);
	}*/
	return sum-1;
}
void dfs(int n)
{
	if(n==K+1)
	{
		int t=lx();
		if(mx<t)
		{
			mx=t;
			for(int i=1;i<=K;i++)
			{
				ans[i]=a[i];
			}
		}
	}
	else if(n==1)
	{
		a[n]=1;
		dfs(n+1);
	}
	else
	{
		for(int i=a[n-1]+1;i<=N*a[n-1]+1;i++)
		{
			a[n]=i;
			dfs(n+1);
		}
	}
}
int main()
{
	scanf("%d%d",&N,&K);
	mx=N;
	a[0]=1; 
	dfs(1);
	for(int i=1;i<=K;i++)
	{
		printf("%d ",ans[i]);
	}
	printf("\n");
	printf("MAX=%d",mx);
	return 0;
}
2022/10/3 21:46
加载中...