BZOJ4926 皮皮妖的递推
第二次乱出题。
为了方便,以m=2为例,把原式变一下形,得f(i)+f(f(i-1))=i
我们先无视掉那个-1,我们发现:诶,这个东西好像斐波那契数列。
具体地,我们用f(n)表示把n用斐波那契数列进行拆分后,每一项的前一项的和。
例:20=13+5+2,f(20)=8+3+1
我们惊奇的发现现在已经可以满足f(i)+f(f(i))=i这个式子了。
但是现在有个-1,怎么办呢,其实很简单,我们定义斐波那契数列第0项为1即可。
证明:设$g_0=g_1=g_2=1,g_i=g_{i-1}+g_{i-2},n=\sum_{i=1}^kg_{a_i}$
我们考虑n-1的形式。
1.
n-1与n的前k-1项一定相同,所以在前k-1项满足这个式子。
2.
当n的第k项为1时,n-1没有第k项,此时1+0=1,满足这个式子。
3.
否则当n的第k项不为1时,你会发现$f(f(g_{a_k}-1))=g_{a_{k-2}}$
这个东西不好说明,举个例子
$g_{a_k}=34=21+8+3+1+1$
$g_{a_k}-1=21+8+3+1$
$f(f(g_{a_k}))=8+3+1+1=13=g_{a_{k-2}}$
这就是为什么我要把第0项设成1的原因,所以第k项也满足。
证毕。
当m更大时,只需把g的递推式改为$g_i=g_{i-1}+g_{i-m}$即可。
#include <cstdio> int m,t;
long long n,a1,f[]; int main() {
scanf("%lld%d",&n,&m);
for(int i=;i<=m;i++) f[i]=;
for(int i=m+;;i++) {
f[i]=f[i-]+f[i-m];
if(f[i]>n) {t=i-; break;}
}
for(int i=t;n;i--) if(f[i]<=n) n-=f[i],a1+=f[i-];
printf("%lld",a1);
return ;
}
BZOJ4926 皮皮妖的递推的更多相关文章
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- Flags-Ural1225简单递推
Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...
- 利用Cayley-Hamilton theorem 优化矩阵线性递推
平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 简单递推 HDU-2108
要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
随机推荐
- Microsoft dynamic 批量更新
//批量处理 ExecuteMultipleRequest multipleRequest = new ExecuteMultipleRequest() { Settings = new Execut ...
- JAVA_SE基础——45.基本类型变量.值交换[独家深入解析]
需求:定义一个函数交换两个基本类型变量的值. 相信看过我前面的文章的同学都应该看的懂我以下的代码: class Demo2 { public static void main(String[] arg ...
- JAVA_SE基础——42.final修饰符
高手勿喷~ final关键字可用于修饰类.变量和方法,它有"这是无法改变的"或者"最终"的含义,因此被final修饰的类.变量和方法将具有以下特征: 1.fin ...
- 第五章 JavaScript对象及初识面向对象
第五章 JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...
- WPF 自定义ComboBox样式
一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样式效果: 基本样式代码如下: <!--ComboBo ...
- SpringCloud的Hystrix(二) 某消费者应用(如:ui、网关)访问的多个微服务的断路监控
一.验证断路保护监控是否管理多个消费者 app 1.第1个消费者应用:访问自己封装rest服务 saleProd 2.第2个消费者应用:第二个应用没有反应 说明 1.每个应用实例的断路保护机制,只对本 ...
- SpringBoot应用的监控与管理
spring-boot-starter-actuator模块 /health /autoconfig /beans /configprops:应用配置属性信息 /env:环境属性,如:环境变量.jvm ...
- React-redux使用中有关Provider问题
先上错误: Warning: Failed prop type: Invalid prop `children` of type `array` supplied to `Provider`, exp ...
- byte在计算机中的存储方式--Double.byteValue()的输出结果思考
先举三个栗子: 1. public static void main(String[] args) { Double d = new Double(123.56); byte b = d.byteVa ...
- C#实现导出Excel
这段时间用到了导出Excel的功能,这个功能还是比较常用的,我常用的有两个方法,现在整理一下,方便以后查看. 一.实现DataTable数据导出到本地,需要自己传进去导出的路径. /// <su ...