洛谷P1573 栈的操作

本文详细介绍了四柱汉诺塔问题,通过递推公式解析了最小步数的计算,并提供了两种算法思路,包括递推方法和枚举方法。重点探讨了数据范围较大的情况下的解题策略,通过观察f[n]的规律解决大数问题。
摘要由CSDN通过智能技术生成

(没想到能够找到一个水题写题解)

题目等价于四塔汉诺塔 易得状态转移方程为

e[i]=min(2*e[j]+f[i-j])(1<=j<i)

第一种写法:

枚举数列又可以发现增长规律 1 个 2 0 , 2 个 2 1 , 3 个 2 2 , 4 个 2 3 , 5 个 2 4 1个2^0,2个2^1,3个2^2,4个2^3,5个2^4 1个2 0 ,2个2 1 ,3个2 2 ,4个2 3 ,5个2 4 (写到要发电了) ————————————————

1.AC代码参考:

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e6+7;
long long n,k,v,ans;
int main()
{
    scanf("%lld",&n);
    k=1;
    v=1;
    for(;n>k;)
    {
        n-=k;
      ans=(ans+k*v)%mod;
      v=(v+v)%mod;
      k++;
    }
    printf("%lld",(ans+n*v)%mod);

    return 0;
}

第二种方法:

(如有哪些地方不足,还请各位大佬指出)

本题是一个经典的四柱汉诺塔问题, 下面我来详细的讲解一下四柱汉诺塔:

要想了解四柱汉诺塔,我们必须要先明白三柱汉诺塔的原理 :

在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值