这合理吗?!
查看原帖
这合理吗?!
142549
hbhz_zcy楼主2022/10/4 12:12

关于主函数中循环顺序的改变,影响近100100倍的效率。

const int maxn=1e5+10,maxm=30,maxh=1e9+10;
int N,M,ans=maxh,sum[maxm],cost[maxm],sqr[maxn];
int main(){
	freopen("in.txt","r",stdin);
	N=qd(),M=qd();
	for(int i=1;i*i<=N;i++)  
	for(int j=i*i;j<=N&&j<(i+1)*(i+1);j++)  sqr[j]=i;
    
	for(int i=1;i<=M;i++)  
	sum[i]=sum[i-1]+i*i*i,cost[i]=cost[i-1]+2*i*i;
    
	for(int i=sqr[(N-sum[M-1])/M];i>=M;i--)  
	for(int j=(N-sum[M-1])/i/i;j>=M;j--)  
	dfs(N-i*i*j,i,j,M-1,2*i*j+i*i);
	printf("%d\n",ans==maxh?0:ans);
	return 0;
}

所指的最后一个循环,原本长这个样子:
for(int i=M;i*i*M+sum[M-1]<=N;i++) for(int j=M;i*i*j+sum[M-1]<=N;j++) dfs(N-i*i*j,i,j,M-1,2*i*j+i*i);

然后会T,跑的特别慢。修改了之后最大点5ms。

2022/10/4 12:12
加载中...