漢諾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);
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com