您的位置:首页 > 其它

hdu1028(递归)&杭电oj_1028

2014-03-30 12:15 405 查看
题目大意及分析:

求分解整数n的个数q(n)

例:

5 = 5;

5 = 4 + 1;

5 = 3 + 1 + 1;

5 = 3 + 2;

5 = 2 + 2 + 1;

5 = 2 + 1 + 1 + 1;

5 = 1 + 1 + 1 + 1 + 1;

sum(5) = 7;不区分顺序,即(3+2)与(2+3)为同一个。此题需要递归求解,但考虑到时间问题,可根据递归式转存到数组中

类似于(动态规划)

原题地址——Ignatius and the Princess III(分解整数)

源代码

#include<iostream>

using namespace std;

int a[121][121];——//储存数组

long long q(int n,int m)

{

    if((n<1)||(m<1)) return 0;

    if((n==1)||(m==1)) return 1;

    if(n<m) return q(n,n);

    if(n==m) return q(n,m-1)+1;

    return q(n,m-1)+q(n-m,m);

}

int main()

{

    for(int i=1;i<=120;i++){

        for(int j=1;j<=120;j++){//由递归式转存到数组中,减少计算量

            if((i==1)||(j==1)) a[i][j]=1;

            else if(i<j) a[i][j]=a[i][i];

            else if(i==j) a[i][j]=a[i][j-1]+1;

            else a[i][j]=a[i][j-1]+a[i-j][j];

        }

    }

    int n;

    while(cin>>n){

        cout<<a

<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: