自然數無序拆分 三種方法

2021-09-02 21:48:40 字數 1994 閱讀 5594

時間限制: 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;

int dp(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];

int main()

} 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];

int main()

} memcpy(num1, num2, sizeof(num2));

memset(num2, 0, sizeof(num2));

} printf("%d\n", num1[n]);

return 0;

}/**/

自然數無序拆分

原 2018年12月09日 12 10 27 oneplus123 時間限制 1 sec 記憶體限制 128 mb 題目描述 美羊羊給喜羊羊和沸羊羊出了一道難題,說誰能先做出來,我就獎勵給他我自己做的一樣禮物。沸羊羊這下可樂了,於是馬上答應立刻做出來,喜羊羊見狀,當然也不甘示弱,向沸羊羊發起了挑戰。...

自然數無序拆分

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...

回文數的判斷 三種方法

最近做了一點關於回文數的總結。首先先寫一篇關於回文數判斷的幾種方法。回文數的概念 即是給定乙個數,這個數順讀和逆讀都是一樣的。例如 121,1221是回文數,123,1231不是回文數。方法一 試用情境,處理小數字。使用數學方法。輸入的回文數x的範圍為x 10 9,int儲存,或者x 10 18,l...