(没想到能够找到一个水题写题解)
题目等价于四塔汉诺塔 易得状态转移方程为
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;
}
第二种方法:
(如有哪些地方不足,还请各位大佬指出)
本题是一个经典的四柱汉诺塔问题, 下面我来详细的讲解一下四柱汉诺塔:
要想了解四柱汉诺塔,我们必须要先明白三柱汉诺塔的原理 :
在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(