动态规划-整数拆分

对于奇数,其中必有1这个拆分所以 f(2n+1)=f(2n)

对于偶数,分为两种情况,

111111.拆分中含有1,则与奇数情况相同 f(2n+2)= f(2n+1)=f(2n)

22222.拆分中不含1,所有数除以2, f(2n)=f(n)

所以 f(2n)=f(2n-2)+f(n)

边界条件为f(1)=1

#include<stdio.h>
#include<stdlib.h>
#define MIX 1000000000
int main(){
    int n;
    int dp[1000001];
    scanf("%d",&n);
    dp[0]=1;
    for(int i=1;i<=n;i++){
        if(i%2==0)
            dp[i]=(dp[i-2]+dp[i/2])%MIX;
        else
            dp[i]=dp[i-1];
    }
    printf("%d\n",dp[n]);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,782评论 0 2
  • 有人喜欢花,喜欢花的娇艳;有人喜欢树,喜欢树的挺拔;也有人喜欢草,喜欢草的可爱……但是,有谁能想到——在微风中,亭...
    李dree阅读 3,165评论 1 1
  • 一地鸡毛,一天会议
    海堤文昌鱼阅读 988评论 0 0
  • 知道这个标题不该由我一个结婚的女人嘴里出来,不过也是因为这样 我才知道不结婚 单身是多么美好的事情 以前勒 觉...
    邓先生的媳妇付小姐阅读 1,729评论 0 0
  • 我一直是个不合群的人。 每天一来到公司,周围的同事们就开始分享购物心得,八卦最近的新鲜事,讨论得热火朝天,我静默不...
    旅行祈祷与爱阅读 9,041评论 1 16