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

来源:互联网 发布:notepad的json插件 编辑:程序博客网 时间:2024/05/17 23:06

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 longusing 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);}
原创粉丝点击