Portal

Description

定义\(k\)-bonacci数列\(\{F_n\}\):\(F_i=0 \ (i<k),F_i=1 \ (i=k),F_i=\sum_{j=i-k}^{i-1}F_j\)

给出\(s(s\leq10^9)\)和\(k(k\leq10^9)\),将\(s\)拆成若干个\(k\)-bonacci数之和。

Solution

结论:重复从\(s\)中减掉最大的\(F_i\),一定能使\(s=0\)。

可以用数学归纳法证明。

若对于正整数\(k\),\(\forall s\in [0,F_k-1]\)该结论成立,则\(\forall s\in [F_k,F_{k+1}-1]\),其下最大的\(F_i\)为\(F_k\),而\(s-F_k\in [0,F_{k-1}-1]\),其必然也能按上述方法减至0。

而因为\(k=1\)时该结论成立,所以\(\forall s\)该结论均成立。

Code

//Well-known Numbers
#include <cstdio>
#include <algorithm>
using namespace std;
int const N=1e5+10;
long long f[N];
int n,m,ans[N];
int main()
{
int s,k; scanf("%d%d",&s,&k);
int n; f[1]=1;
for(n=2;f[n-1]<s;n++)
for(int j=max(1,n-k);j<=n-1;j++) f[n]+=f[j];
int m=0;
for(int i=n-1;i>=1&&s;i--) if(f[i]<=s) ans[++m]=f[i],s-=f[i];
if(m<2) ans[++m]=0;
printf("%d\n",m);
for(int i=1;i<=m;i++) printf("%d ",ans[i]);
puts("");
return 0;
}

P.S.

看标签猜结论系列binary search greedy number theory。不过根本不需要binary search啊!

最新文章

  1. 打开页面自动打开QQ的javascript代码
  2. EXCEL经纬度转化
  3. 基础知识系列☞IList ←vs→ List
  4. Linux:多文件编辑
  5. Entity Framework 使用
  6. android学习笔记26——Activity
  7. LinkedList类
  8. python_Opencv_滑动条用法
  9. linux groupmems命令
  10. 设置outlook自动回复
  11. Patch to solve sqlite3_int64 error when building Python 2.7.3 on RHEL/CentOS
  12. MLAPP——概率机器学习知识汇总
  13. react学习笔记1--基础知识
  14. javaWEB总结(2): load-on-startup节点
  15. javascript之this
  16. 自制PHP高防防盗链(不是一般的高)(思路)
  17. 写个批处理脚本来帮忙干活--遍历文件夹&amp;字符串处理
  18. Python:游戏:测试打字速度
  19. spring mvc \ spring boot 允许跨域请求 配置类
  20. 最简单的uwsgi+nginx配置多个django站点

热门文章

  1. 【转】在 26 岁时写给 18 岁的自己--Livid
  2. Array(数组)的基本方法
  3. vs 2017 下 千万不要装force utf8 这个插件
  4. (转)关于IC设计的想法 Author :Fengzhepianzhou
  5. myeclipse 安装svn(subeclipsesite)插件
  6. [转]qt QTableWidget&amp;&amp;QTableView 导出数据到excel
  7. MFC技术积累——基于MFC对话框类的那些事儿5
  8. Kali 2017.3开启VNC远程桌面登录
  9. makefile vpath变量
  10. mysql利用binlog恢复数据