牛客-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