題目描述
將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同(不考慮順序)。
例如:n=7,k=3,下面三種劃分方案被認為是相同的。
1 1 5
1 5 1
5 1 1
問有多少種不同的分法。
輸入n,k (6輸出
乙個整數,即不同的分法
樣例輸入
7 3樣例輸出
4題目型別:dfs,求分發的種類
思路:這是一道深搜的剪枝題,題目需要我們找出將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同(不考慮順序),顯然我們可以將每乙份排序一下,只需按次序遞減就可以得到不同的分法,例如:
1 1 5
1 2 4
1 3 3
2 2 3
第乙個到3後,由於如果繼續往上公升,會發現無法得到遞增的數列
**:
#includeusing namespace std;
int ans;
int n,k;
void dfs(int now,int sum,int num)
//now代表現在所遍歷的數,sum表示已經加上的數之和,num表示已經加上的數的個數
return;
}for(int i=now;sum+i*(k-num)<=n;i++)
//當i加到剩下的和(n-sum)不足以恰好分配到剩下的個數(k-num)中剪掉
}int main()
1440 例題1 數的劃分 dfs剪枝
1440 例題1 數的劃分 時間限制 1000 ms 記憶體限制 65536 kb 提交數 1607 通過數 1059 題目描述 將整數n分成k份,且每份不能為空,任意兩份不能相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。問有多少種不同的分法。輸出乙個整數,即不同的分法。輸入 ...
數的劃分問題 DP
問題 把乙個整數n分成k份,每份都不為0,有幾種分法?分析 情況分為兩類 一 每份中不包含1的方法,為保證每份 2,先拿出k個1到每乙份,然後把剩下的n k分為k份,分法有dp n k k 二 至少有乙份包含1,拿出1個當為乙份。剩下的n 1個分為k 1份,分法有dp n 1 k 1 include...
集合劃分問題(貝爾數)
time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description n個元素的集合可以劃分若干個非空子集。例如,當n 4時,集合可以劃分為15個不同的非空子集如下 給定正整數n 1 n 20...