整數劃分系列

2022-03-17 02:21:13 字數 2513 閱讀 7653

描述

將正整數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。 

輸入第一行是測試資料的數目m(1<=m<=10)。以下每行均包含乙個整數n(1<=n<=10)。

輸出輸出每組測試資料有多少種分法。

樣例輸入

1

6

樣例輸出

11
【思路】

dp[i][j]代表整數i劃分的所有數中最大數不超過j的劃分數。

#includeusing

namespace

std;

int dp[15][15

];

intmain()

cin>>t;

while(t--)

return

0;

}

view code

因為n很小不超過10,可以用遞迴寫,最多算10!也不會tle,下面是dfs:

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;

intn,ans;

void dfs(int i,int

s)

for(i; i<=10; i++)//

保證每次加的數大於等於原來的

} intmain()

}

view code

n劃分成m個整數的和

dp[i][j]代表i劃分成j個數

#includeusing

namespace

std;

int dp[105][108

];

intmain()

cin>>t;

while(t--)

return

0;

}

view code

描述acm隊隊花c小+最近在x大oj上做題,竟發現了一道做不出來的…水題!她快鬱悶死了……也許是最近狀態不太好吧……她希望大家能幫幫忙:把乙個整數分成若干個不為零的整數,問有多少種不同分法。

例:7 3 其中的分法:1 1 5,1 5 1,5 1 1是同一種分法。

輸入有多組測試資料

每組資料都有兩個整數n,m(6<=n<=500,2<=m<=6)

n表示該整數,m表示把n分成m份

輸出對每一組測試資料,輸出不同的分法數

樣例輸入

7 3

10 2

20 3

樣例輸出

4

533

注意m<=6即可

#includeusing

namespace

std;

int dp[505][8

];

intmain()

while(~scanf("

%d%d

",&n,&m))

return

0;

}

view code

將n(n<=50000)分為若干個不同整數的和,有多少種不同的劃分方式,例如:n = 6, ,共4種。由於資料較大,輸出mod 10^9 + 7的結果即可。

開始想的dp[i][j]代表j的最大劃分數不超過i,但是陣列需要開很大。

換個思路就是dp[i][j]代表j劃分成i個整數的方法數,也分有1還是沒有1,跟上面第2題有點類似,但是還要求劃分成不同的整數,所以方程為dp[i][j] = dp[i][j-i](無1) + dp[i-1][j-i](有1且僅有1個1)

認真思考會發現i不會超過320,利用等差數列求和求出

#include using

namespace

std;

const

int n = 50000

;const

int mod = 1e9+7

;typedef

long

long

ll;ll dp[

322][n+4

];int

main()

while(~scanf("

%d", &n))

printf(

"%d\n

", ans);

}return0;

}

view code

整數劃分系列問題(動態規劃)

今天上演算法分析與設計課時,提到整數劃分問題,但是因為之前沒有很好地理解這一系列的問題。當被老師問到你們做演算法的應該會這個問題吧,我當時也不太記得,但是只能硬頭皮試著去寫了下,用的是brute force,老師果斷說我的方法跑不出正確的解,但是課堂上我也沒有去解釋了。課後自己驗證了一下,沒有問題,...

整數劃分(劃分dp)總結

寫了幾個題發現整數劃分是一類題,而不是一道題。具體題型 1 n相同元素放入m個相同的盤子 盤子允許為空 例題 放蘋果 poj 1664設dp i j 為 j 個元素放入i個盤子轉移方程 dp i j dp i 1 j 新新增乙個盤子,盤子為空 dp i j dp i j i i個盤子 各取出乙個 2...

整數劃分問題

整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...