萌新TLE70分求助
查看原帖
萌新TLE70分求助
977096
xmxhxmxhxmxh楼主2023/3/27 21:35

RT

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll int
ll n,m,s1[31],s2[31],ans=11451,sum;
void dfs(ll v,ll s,ll t,ll r,ll h)
{
	sum=0;
	if(t==0)
	{
		if(v==n&&s<ans)
			ans=s;
		return ;
	}
	if(v+s2[t-1]>n)	return ;
	//if(s+s1[t-1]>ans)	return ;
	if(2*(n-v)/r+s>=ans)	return ;
	for(ll i=r-1;i>=t;i--)
	{
		if(t==m)	s=i*i;
		sum=min(n-v-s2[t-1]/(i*i),h-1);
		for(ll j=sum;j>=t;j--)
		{
			dfs(v+i*i*j,s+2*i*j,t-1,i,j);
		}
	}
}
int main()
{
    cin>>n>>m;
    s1[0]=s2[0]=0;
    for(ll i=1;i<=20;i++)
    {
    	//s1[i]=s1[i-1]+2*i*i;
    	s2[i]=s2[i-1]+i*i*i;
	}
	dfs(0,0,m,n+1,n+1);
	if(ans==11451)
	{
		cout<<0;
	}
	else
	{
		cout<<ans;
	}
    return 0;
}
2023/3/27 21:35
加载中...