P1025 數的劃分(排列組合問題)

2021-09-11 02:21:51 字數 1139 閱讀 7164

目錄dp

dfs將整數n分成k份,且每份不能為空,任意兩個方案不相同(不考慮順序)。

例如:n=7,k=3,下面三種分法被認為是相同的。

1,1,5;

1,5,1;

5,1,1.

問有多少種不同的分法。

輸入格式:

n,k (6輸出格式:

1個整數,即不同的分法。

輸入樣例#1:複製

7 3
輸出樣例#1:複製

4
四種分法為:

1,1,5

1,2,4;

1,3,3;

2,2,3.

f[ i ][ x ] 表示 i 分成 x 個非空的數的方案數,

當 i < x 時,f[ i ][ x ]=0,當 i==x 時,f[ i ][ x ]=1

當 x 為1的時候,就是只用分乙份的時候 f 的值就是1

關鍵是要知道如下情況:

狀態轉移方程:

**:

#includeusing namespace std;

int n,k;

int f[210][7];

int main()

cout就注意乙個點:如果不剪枝,不單單是tle的問題,連正確答案都出不來,會重複計算

**:#includeusing namespace std;

int n,k;

int sum;

void dfs(int step,int num,int rest)

/* 同時迴圈最大只能進行到t/s,

避免出現因前面的數過大而導致後面的數無法取的情況。*/

//for(int i=step;i<=num;i++)

//剪枝:不需要列舉到num,否則既有可能重複計算,又會加大運算

for(int i=step;i<=num/rest;i++) //剪枝 i<=num/rest

dfs(i,num-i,rest-1);

}int main()

P1025 數的劃分

將整數nn分成kk份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7n 7,k 3k 3,下面三種分法被認為是相同的。1,1,51,1,5 1,5,11,5,1 5,1,15,1,1.問有多少種不同的分法。輸入格式 n,kn,k 6輸出格式 11個整數,即不同的分法。include d...

P1025 數的劃分

展開 將整數nn分成kk份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7n 7,k 3k 3,下面三種分法被認為是相同的。1,1,51,1,5 1,5,11,5,1 5,1,15,1,1.問有多少種不同的分法。n,kn,k 611個整數,即不同的分法。四種分法為 1,1,51,1,5...

P1025 數的劃分

題目描述 將整數n分成k份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 n,k 6輸出格式 1個整數,即不同的分法。輸入輸出樣例 輸入 1 7 3 輸出 1 說明 提示 四種分法...