其他分享
首页 > 其他分享> > 牛客-kotori和糖果(哈斯图吗?)

牛客-kotori和糖果(哈斯图吗?)

作者:互联网

题意:开始时有n堆糖,每堆开始时有1个把这些糖果聚在一堆。但她每次只能把两堆糖果合并成一堆。

已知把两堆数量为a和b的糖果聚在一堆的代价是|a-b|。

kotori想知道,她把这n块糖果聚在一堆的最小代价是多少?
题目链接

one:

for(int i=1;i<=1e18+10;i++)
{
		m[i] = m[i/2]+m[i-i/2] +(i/2==0?0:1);
}

problem:复杂度过高,达到了1e18

two:

可以想到,可以使用递归来优化
(坑点1:n=0)

ll init(ll n)
{
	if(n==1||n==0)   return 0;
	if(n&1) return m[n] = init(n/2) + init(n/2+1)+1;
	else return m[n] = init(n/2)*2;
}
void main():
{
	init(1e18);                 //初始化
}
//坑点1:n=0

problem:从1到1e18不能都初始化,而且有很多重复的
搜索树

three:

ll init(ll n)
{
	if(m[n]) return m[n];
	if(n==1||n==2)   return 0;
	if(n&1) return m[n] = init(n/2) + init(n/2+1)+1;
	else return m[n] = init(n/2)*2;                   //这里可以减少递归
}

标签:return,1e18,kotori,ll,牛客,init,哈斯,聚在,糖果
来源: https://blog.csdn.net/qq_43312551/article/details/94568176