zoukankan      html  css  js  c++  java
  • Codeforces225B

    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(sleq10^9))(k(kleq10^9)),将(s)拆成若干个(k)-bonacci数之和。

    Solution

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

    可以用数学归纳法证明。
    若对于正整数(k)(forall sin [0,F_k-1])该结论成立,则(forall sin [F_k,F_{k+1}-1]),其下最大的(F_i)(F_k),而(s-F_kin [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
    ",m);
        for(int i=1;i<=m;i++) printf("%d ",ans[i]);
        puts("");
        return 0;
    }
    

    P.S.

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

  • 相关阅读:
    P1141零一迷宫
    P1219八皇后
    P1233木棍加工
    三 Struts2 添加返回数据
    二 Struts2 接收数据
    一 Struts2 开发流程
    12-tinyMCE文本编辑器+图片上传预览+页面倒计时自动跳转
    11-page分页原理
    10-ajax技术简介
    9-文件上传和下载
  • 原文地址:https://www.cnblogs.com/VisJiao/p/Cf225B.html
Copyright © 2011-2022 走看看