题解 | #循环汉诺塔#

循环汉诺塔

https://www.nowcoder.com/practice/cdf0808f841748faba058c8ef538c731

#include <iostream>
// 87350326 887197658 444
using namespace std;
typedef long long LL;
const int N = 1e7;
const long long p = 1000000007;
LL hnt1(int i);
LL hnt2(int i);
int dp1[N], dp2[N];
int main() {
    int n;
    cin >> n;
    //避免递归过深,逐步处理,记忆化处理结果
  	for(int i = 1; i < n; i += 1000)
    {
        hnt1(i), hnt2(i);
    }
    cout << hnt1(n) << ' ' << hnt2(n);
}
LL hnt1(int i) {
    if(i == 1) dp1[1] = 1;
    if(dp1[i]) return dp1[i]; 
    LL step2 = hnt2(i - 1) % p;
    dp1[i] = (1 + step2 * 2) % p;
    return dp1[i];
}
LL hnt2(int i) {
    if (i == 1) dp2[1] = 2;
    if(dp2[i]) return dp2[i];
    LL step2 = hnt2(i - 1) % p;
    LL step1 = hnt1(i - 1) % p;
    dp2[i] = (2 + step1 + step2 * 2) % p; 
    return dp2[i];
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务