dfs: 为啥我优化后反而变慢了??
查看原帖
dfs: 为啥我优化后反而变慢了??
416021
吃不饱QAQ楼主2022/6/14 23:00

这是我最开始的代码

#include<stdio.h>
int K,cnt;//K表示题中要求分多少种,cnt记录答案 
void dfs(int n,int k,int c)//分别表示 正在拆分的数字 还要拆成几份 能拆分出的最小值 
{
	if(k==K-1) 
	{
		cnt++;
		return;
	}
	int i;
	for(i=c;i<=n/2;i++)
	//注意这个n/2,想的狭隘了,只考虑了下一次选的数必须大于等于当前的数
	dfs(n-i,k+1,i);
}
int main()
{
	int n;
	scanf("%d%d",&n,&K);
	dfs(n,0,1);
	printf("%d",cnt);
}

提交结果

后来考虑到,果要把数字n拆k份,那最小的数字一定不能大于n/k,所以把n/2改成了n/(K-k),然而交上去后居然更慢了,最后一个点慢了7ms。提交结果

蒟蒻表示无法理解了,我的想法是K-k最小是2,所以第二种最差的情况才和第一种复杂度相同,不应该只优不劣吗,咋还变慢了呢?(世界观崩塌惹)

2022/6/14 23:00
加载中...