整数拆分

原创 2015年06月27日 22:12:29

题目描述

一个整数总可以拆分为2的幂的和,例如:
7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
统共有六种不合的拆分体式格式。
再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。
用f(n)默示n的不合拆分的种数,例如f(7)=6.
请求编写法度,读入n(不跨越1000000),输出f(n)%1000000000。

输入:

每组输入包含一个整数:N(1<=N<=1000000)。

输出:

对于每组数据,输出f(n)%1000000000。

样例输入:

7

样例输出:

6

分析

对于奇数n=2k+1:它的拆分的第一项必然是1,推敲去掉这个1,其实就一一对应于
2k的拆分,是以f(2k+1)=f(2k).

对于偶数n=2k:推敲有1和没有1的拆分。有1的拆分,与(2k-1)的拆分一一对应,与上方奇数的景象
来由雷同;没有1的拆分,将每项除以2,正好一一对应于k的所有拆分。是以f(2k)=f(2k-1)+f(k).

须要重视f(n)会很大,不要溢出了。终极成果只请求除以十亿的余数,在int的默示局限内,
是以不须要大数运算。重视余数的性质:(a+b)%m == (a%m+b%m)%m,所以只要对每个中心
成果也都取余数,就不会有溢出的题目,且不改变终极输出成果。

#include <stdio.h>
int f[1000001];
int main()
{
    int i,n;
    while(scanf("%d",&n)!=EOF)
    {
        f[0]=1;
        f[1]=1;
        for(i=2;i<=n;i++)
        {
            if(i%2==0)
                f[i]=(f[i-1]+f[i/2])%1000000000;
            else
                f[i]=f[i-1];
        }
        printf("%d\n",f[n]);
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

整数拆分的两种解法(已完成)

整数拆分的两种解法(已完成) 4.1 集合的分划和第二类Stirling数 定义1  (集合的划分) 设A 是有限集.A 的一族子集{Ai}称...
  • pi9nc
  • pi9nc
  • 2012年11月02日 20:01
  • 7589

经典算法题:无序整数数组中找第k大的数

经典问题:写一段程序,找出数组中第k大的数,输出数所在的位置。 【解法一】先排序,然后输出第k个位置上的数 我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速...
  • wangbaochu
  • wangbaochu
  • 2016年10月27日 21:02
  • 4095

整数拆分问题的四种解法

经典整数拆分的问题的算法设计与实现,分别给出递归版本、动态规划版本、五边形数定理版本、母函数版本四种算法设计与实现...
  • u011889952
  • u011889952
  • 2015年04月01日 21:17
  • 9184

九度OJ 1084 整数拆分

题目地址:http://ac.jobdu.com/problem.php?pid=1084 题目描述: 一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 ...
  • JDPlus
  • JDPlus
  • 2014年01月28日 10:36
  • 2933

整数拆分的两种解法(已完成)

前几天在算法书上看到一个整数拆分的题目,觉得挺有意思,记录如下:   题目:给定一个整数n,输出这个整数拆分的可能总数 例如:n==6有 6 5+1 4+2    4+1+1 3+3  ...
  • lawrencesgj
  • lawrencesgj
  • 2012年09月30日 17:04
  • 4208

整数拆分

题目: 一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1...
  • baobao44199
  • baobao44199
  • 2014年04月23日 14:30
  • 1565

整数分解(递归)

题目大意:给定一个整数n,找到k个数,使得其和等于n。 解题思路:要分解整数n,肯定先要找到一个因子,然后我们会发现,剩下的问题还是一个整数分解问题,因此容易得到问题的解。 定义函数f(n)为n可以分...
  • u012492780
  • u012492780
  • 2014年03月19日 23:50
  • 1796

整数分解方法

题目大意:给定一个整数n,找到k个数,使得其和等于n。 如: 4=1+1+1+1 4=1+1+2; 4=1+3; 4=2+2; 4+4; 求其分解的所有可能,并输出分解表达式。 解题思...
  • summerxiachen
  • summerxiachen
  • 2017年03月16日 13:42
  • 1787

自然数n拆成不同的自然数的和

/** * 0/1 背包问题,简化版。 * 将自然数n拆成不同的自然数的和的形式有多少种方案。 * * 动态规划: * 从前i个数中选择若干个数,其和等于j,一共有f(i, j)种方案。 ...
  • wangche320
  • wangche320
  • 2013年06月28日 10:12
  • 293

将一个正整数n,拆分成连续的自然数之和,输出所有可能的情况

http://blog.csdn.net/kennyrose/article/details/6544518  本文链接,感谢分享!! from编程之美2.21 问题描述:将一个正整数,拆分成...
  • xiezhongtian
  • xiezhongtian
  • 2014年03月22日 21:29
  • 1817
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数拆分
举报原因:
原因补充:

(最多只允许输入30个字)