TLE80pts求助(#2,#8TLE)
查看原帖
TLE80pts求助(#2,#8TLE)
569235
w9095楼主2023/1/14 14:23

能用的剪枝都用了,本机#2 0.6s,怀疑被卡常,求调

#include <bits/stdc++.h>
using namespace std;
long long n,m,ans=99999999,mr[10000],mh[10000],t[16]={0,0,1,9,36,100,225,441,784,1296,2025,3025,4356,6084,8281,11025};
void dfs(long long now,long long sum,long long cnt)
{
	if(sum>=n-t[m-now]&&now!=m)return;
	if(cnt>=ans)return;
	if(now==m)
	   {
	   	if(sum==n)ans=min((int)ans,(int)cnt);
	   	return;
	   }
	for(long long i=mr[now]-1;i>=0;i--)
	    for(long long j=mh[now]-1;j>=0;j--)
	        {
	        long long v=i*i*j;
	        if(sum+v>n-t[m-now]||v<(n-sum)/(m-now)||i<(m-now)||j<(m-now))continue;
	        mr[now+1]=i;mh[now+1]=j;
	        if(now==0)cnt=i*i;
	        dfs(now+1,sum+i*i*j,cnt+2*i*j);
	        }
}

int main()
{
	scanf("%d%d",&n,&m);
	mr[0]=sqrt(n)+1;mh[0]=n;
	dfs(0,0,0);
	printf("%d",ans);
    return 0;
}
2023/1/14 14:23
加载中...