整数拆分问题

来源:互联网 发布:数据库基础pdf 编辑:程序博客网 时间:2024/06/10 05:29

整数拆分问题(EOJ-1009)

将正整数n表示成一系列正整数之和: n=n1+n2+…+nk,

其中n1≥n2≥…≥nk≥1(k≥1)
正整数 n 的这种表示称为正整数 n 的拆分。求正整数 n 的不同拆分个数。 
例如,正整数6有如下11种不同的拆分:
    6;
    5+1;
    4+2,4+1+1;
    3+3,3+2+1,3+1+1+1;
    2+2+2,2+2+1+1,2+1+1+1+1;

    1+1+1+1+1+1。

#include <stdio.h>#include <stdlib.h>#include <memory.h>int s[101][101];//保存已经计算过的int divide(int n, int m){    if(s[n][m]==-1)    {        if(m==1||n==1) s[n][m]=1;//递归出口        else if(m>n) s[n][m]=divide(n,n);        else if(m==n) s[n][m]=1+divide(n,n-1);        else s[n][m]=divide(n-m,m)+divide(n,m-1);    }    return s[n][m];}int main(){    int n;    memset(s,-1,sizeof(s));    while(scanf("%d",&n)!=EOF)        printf("%d\n",divide(n,n));    return 0;}



0 0
原创粉丝点击