汉诺4塔——洛谷 P1573 栈的操作

https://www.luogu.org/problem/show?pid=1573

首先,看出本题的题目原型是Hanoi四塔。
其次,想出动规方程:e[i]=min(2*e[j]+f[i-j])(1<=j < i)(其中f[]为Hanoi三塔的结果,e[]为Hanoi四塔的结果)
最后:找规律。发现e[]相邻两数的差为:1,2,2,4,4,4,8,8,8,8,16,16,16,16,16,…利用此性质解决100%的数据。

我靠我已经想到了dp方程啦的;
但是因为不知道在模域里怎么取min不知道;
然后就放弃啦;
555555555555

#include<bits/stdc++.h>
#define Ll long long
using namespace std;
Ll n,k,v,ans,mo=1e6+7;
int main()
{
    scanf("%lld",&n);
    k=1;v=1;
    for(k=1,v=1;n>k;n-=k,k++,v=(v+v)%mo)ans=(ans+k*v)%mo;
    printf("%lld",(ans+n*v)%mo);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值