Algorithm 有什么算法可以改进我的代码吗?

Algorithm 有什么算法可以改进我的代码吗?,algorithm,Algorithm,海藻 给你k天和n海藻 (1)≤ N≤ 1000, 1 ≤ K≤ 10^17) 在第一天,您的n海藻处于1级 第二天,n海藻将繁殖,每n一级海藻将繁殖n*i一级海藻,这些一级海藻将在一天结束后开始繁殖 每一个在一级的海藻将成为一级+1 k天后,返回海藻的总数 (很抱歉,如果你不理解这个问题,我的翻译能力很差) 例如: 投入:3 产出:39 说明: 第0天:3海藻 第一天:3级1,3级2 第1天的海藻总量=6 第二天:3+3*2级别1(有3个级别1和3个级别2,所以3*1+3*2=9),3个级别2

海藻

给你k天和n海藻


(1)≤ N≤ 1000, 1 ≤ K≤ 10^17)

在第一天,您的n海藻处于1级

第二天,n海藻将繁殖,每n一级海藻将繁殖n*i一级海藻,这些一级海藻将在一天结束后开始繁殖

每一个在一级的海藻将成为一级+1

k天后,返回海藻的总数 (很抱歉,如果你不理解这个问题,我的翻译能力很差)

例如:

投入:3

产出:39

说明:

第0天:3海藻

第一天:3级1,3级2

第1天的海藻总量=6

第二天:3+3*2级别1(有3个级别1和3个级别2,所以3*1+3*2=9),3个级别2,3个级别3

第2天的海藻总量=15

第3天:9+3*2+3*3=24(第2天有9个级别1、3个级别2和3个级别3)级别1、3+3*2=9个级别2、3个级别3、3个级别4

第3天的海藻总量=39

海藻总数:39

你能帮我找到解决这个问题的算法吗?把我的问题缩短成一句话

我的代码似乎没那么快

以下是我的问题代码:

def solver(n,k):
    storage = [n]
    for i in range(k):
        reproduction = 0
        for j in range(len(storage)):
            reproduction += storage[j]*(j+1)
        storage = [reproduction] + storage
    return sum(storage)%(10**9+7)
还有一些测试用例:

输入:n=4,k=3

产出:52

输入:n=5,k=5


输出:445解决方案可通过以下方式表达:


对于极高k值(使用模10**9+7)的斐波那契数,可以使用矩阵求幂法计算

第一个洞察是函数在
n
中是线性的。你可以想象每个
n
最初的海藻植物都是一个独立的谱系;它们的后代不会相互干扰,因此如果你加倍
n
,答案就会加倍。因此,如果你求解
f(1,k)
,那么你只需乘以
n
就可以得到
f(n,k)
。通过缓慢计算,可以为许多
k
的值生成一个
f(1,k)
的值表,然后计算所请求的任何
(n,k)
的值


第二个洞察是在纸上计算出例如
f(1,5)
,并查看数字中的模式。如果你是一名数学家,你会从斐波那契数列中识别出一些术语。(如果你真的是一个数学家,你会证明这个模式。)然后你可以编写
f(n,k)
,以及一些快速代码来计算它。

n和k的约束是什么?(1)≤ N≤ 1000, 1 ≤ K≤ 10^17)第三天编辑的例子也值得一提谢谢这是来自正在进行的比赛还是你有一些链接我可以提交代码并检查测试用例。你能告诉我为什么应该是(2*k+1)而不是kb,因为我们有序列
Gn=G(n-1)+G(n-1)+2*G(n-2)+3*G(n-3)+…+n*G0
。这比斐波那契数列上升“快一倍”,所以跳了斐波那契数列的两步。每走一步。这可能会被数学证明。归纳法(虽然很长)<代码>+1只是选择原点(如果我们从1开始Fib.seq,我们应该删除这个)
solver(n,k) = n*Fib(2*k+1)