2019-03-22 [蓝桥杯][算法提高VIP]数的划分

题目描述
一个正整数可以划分为多个正整数的和,比如n=3时:
3;1+2;1+1+1;
共有三种划分方法。
给出一个正整数,问有多少种划分方法。

数据规模和约定
n< =100

输入
一个正整数n
输出
一个正整数,表示划分方案数
样例输入
3
样例输出
3
提示
C语言在线学习平台微信号dotcpp
来源
算法提高

#include
#include
using namespace std;
const int N = 110;
int dp[N][N];
int main(void)
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) dp[i][0]=0;
    for(int i=0;i<=n;i++) dp[0][i]=1;
    
    //dp[i][j]表示把i拆分成不超过j的方案数 
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            //dp[i][j]只有包含j和不包含j两种情况
            //dp[i][j-1]不包含j,dp[i-j][j]包含若干个j 
            if(i>=j) dp[i][j]=dp[i][j-1]+dp[i-j][j]; 
            else dp[i][j]=dp[i][i]; 
        } 
    }
    printf("%d",dp[n][n]);
    return 0;
}
#include
#include
using namespace std;
long long res,n;
void dfs(int pre,int sum)
{
    if(sum==n) 
    {
        res++;
        return ;
    }
    if(sum>n) return ;
    for(int i=pre;i+sum<=n;i++)
    {
        dfs(i,sum+i);
    }
}
int main(void)
{
    /*
    freopen("D:\\outputdemo","w",stdout);
    for(int i=1;i<=100;i++)
    {
        n=i;
        res=0;
        dfs(1,0);
        printf("a[%d]=%d;\n",i,res);
    }
    */
    int n,a[110];
    cin>>n;
    a[1]=1;
    a[2]=2;
    a[3]=3;
    a[4]=5;
    a[5]=7;
    a[6]=11;
    a[7]=15;
    a[8]=22;
    a[9]=30;
    a[10]=42;
    a[11]=56;
    a[12]=77;
    a[13]=101;
    a[14]=135;
    a[15]=176;
    a[16]=231;
    a[17]=297;
    a[18]=385;
    a[19]=490;
    a[20]=627;
    a[21]=792;
    a[22]=1002;
    a[23]=1255;
    a[24]=1575;
    a[25]=1958;
    a[26]=2436;
    a[27]=3010;
    a[28]=3718;
    a[29]=4565;
    a[30]=5604;
    a[31]=6842;
    a[32]=8349;
    a[33]=10143;
    a[34]=12310;
    a[35]=14883;
    a[36]=17977;
    a[37]=21637;
    a[38]=26015;
    a[39]=31185;
    a[40]=37338;
    a[41]=44583;
    a[42]=53174;
    a[43]=63261;
    a[44]=75175;
    a[45]=89134;
    a[46]=105558;
    a[47]=124754;
    a[48]=147273;
    a[49]=173525;
    a[50]=204226;
    a[51]=239943;
    a[52]=281589;
    a[53]=329931;
    a[54]=386155;
    a[55]=451276;
    a[56]=526823;
    a[57]=614154;
    a[58]=715220;
    a[59]=831820;
    a[60]=966467;
    a[61]=1121505;
    a[62]=1300156;
    a[63]=1505499;
    a[64]=1741630;
    a[65]=2012558;
    a[66]=2323520;
    a[67]=2679689;
    a[68]=3087735;
    a[69]=3554345;
    a[70]=4087968;
    a[71]=4697205;
    a[72]=5392783;
    a[73]=6185689;
    a[74]=7089500;
    a[75]=8118264;
    a[76]=9289091;
    a[77]=10619863;
    a[78]=12132164;
    a[79]=13848650;
    a[80]=15796476;
    a[81]=18004327;
    a[82]=20506255;
    a[83]=23338469;
    a[84]=26543660;
    a[85]=30167357;
    a[86]=34262962;
    a[87]=38887673;
    a[88]=44108109;
    a[89]=49995925;
    a[90]=56634173;
    a[91]=64112359;
    a[92]=72533807;
    a[93]=82010177;
    a[94]=92669720;
    a[95]=104651419;
    a[96]=118114304;
    a[97]=133230930;
    a[98]=150198136;
    a[99]=169229875;
    a[100]=190569292;
    cout<

你可能感兴趣的:(2019-03-22 [蓝桥杯][算法提高VIP]数的划分)