自然數無序拆分

2021-09-11 22:30:58 字數 2621 閱讀 2734

2023年12月09日 12:10:27

oneplus123

時間限制: 1 sec  記憶體限制: 128 mb

題目描述

美羊羊給喜羊羊和沸羊羊出了一道難題,說誰能先做出來,我就獎勵給他我自己做的一樣禮物。沸羊羊這下可樂了,於是馬上答應立刻做出來,喜羊羊見狀,當然也不甘示弱,向沸羊羊發起了挑戰。

可是這道題目有一些難度,喜羊羊做了一會兒,見沸羊羊也十分頭疼,於是就來請教你。

題目是這樣的:

把自然數n(n<=100)分解為若干個自然數之和,求出有幾種情況。

如n=5時,有7種情況

5=1+1+1+1+1

5=1+1+1+2

5=1+1+3

5=1+2+2

5=1+4

5=2+3 

5=5怎麼樣?你要加油幫助喜羊羊哦!

輸入乙個自然數n(n<=100)

輸出無序拆分的種數。

複製樣例資料

5
樣例輸出

7
1.遞迴,超級慢

/**/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace

std;

int n;

intdp(int x, int y)

這一種

return

1;

}else

if(x == y)一種,第二種就是分比y小的數

return

1 + dp(x, x -

1);}

else

if(x < y)

else

if(x > y)

}int

main

()

/**/

2.dp

/**/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace

std;

int n;

int dp[

105][

105];

intmain

()

}printf(

"%d\n", dp[n][n]);

return

0;

}/**/

3.母函式

f(x)=(1+x^1+x^2+x^3....+x^n)*(1+x^2+x^4+...)*.....(1+x^n);

上面的就是母函式。。。應該就是這樣

然後首先數為n的被分數,可以由1,2,3,4,......,n組成,就是不知道選1幾個,選2幾個。。。

這時候我們可以看一下母函式,設選的數字為i,選的次數為k,那麼x的指數可以表示為x^(i*k);

就像f(x)中(1+x^1+x^2+x^3....+x^n)表示1不選,1選一次,1選2次....; (1+x^2+x^4+...)表示2不選,2選1次,選2次。。。

那麼我們要求的分解n的種數就是x^n前的係數(很容易想)。

怎麼求x^n的係數呢,多項式相乘解決。

/**/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using

namespace

std;

int n;

int num1[

105], num2[

105];

intmain

()

}memcpy(num1, num2,

sizeof(num2));

memset(num2,

0, sizeof(num2));

}printf(

"%d\n", num1[n]);

return

0;

}/**/

自然數無序拆分

includeusing namespace std int n int dfs int x,int y int main includeusing namespace std int n,i,j,f 105 105 int main else if i j else if i j3.母函式 f x...

自然數拆分

描述 description 輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入格式 inputformat 輸入只有乙個整數n,表示待拆分的自然數n。n 80 輸出格式 outputformat 輸出乙個數,即所有方案數 樣例輸入 sampleinput 複製資料 7 ...

自然數拆分

問題描述 自然數的拆分 任何乙個大於1的自然數n,總可以拆分成若干個自然數之和,並且有多種拆分方法。試求 n的所有拆分。例如自然數5,可以有如下一些拆分方法 5 1 1 1 1 1 5 1 1 1 2 5 1 2 2 5 1 4 5 2 3 注意,本題中n拆分出來的數x的範圍是1 x整數劃分可以參考...