ALGO-22 数的划分(DFS,经典剪枝)
生活随笔
收集整理的這篇文章主要介紹了
ALGO-22 数的划分(DFS,经典剪枝)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ALGO-22 數的劃分
時間限制: 1 Sec 內存限制: 128 MB
題目描述
將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。
例如:n=7,k=3,下面三種分法被認為是相同的。
1,1,5; 1,5,1; 5,1,1;
問有多少種不同的分法。
數據規模和約定
6<n<=200,2<=k<=6
樣例輸入
7 3
樣例輸出
4
{四種分法為:1,1,5;1,2,4;1,3,3;2,2,3;}
輸入
n,k
輸出
一個整數,即不同的分法
提示
來源
藍橋杯-算法訓練
/*
這題本意是動態規劃,但是DFS+好的剪枝也可行
這題剪枝很多,也很經典!!
剪枝1:
起點s,后面取的數>=s保證不重復,n分成k份,每一份非0,每一份最大可以為n/k,超過n/k相當于s與當前的倒過來取了,重復了,沒有必要
遞推n-sum要分成n-cnt份,所以可以取得最大值為(int)(n-sum)/(k-cnt)
剪枝2:
和sum > n為可行性剪枝
剪枝3:
當確定了k-1份時,按照可行性,最后一份一定是固定的,所以只要分到cnt = k-1就行,
這時判斷剩下的(n-sum)是否>=s就行(根據剪枝一種,后面取的一定>=s).
if(n- sum >= s)
ans++;
*/
Ac_code:
總結
以上是生活随笔為你收集整理的ALGO-22 数的划分(DFS,经典剪枝)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P1135 奇怪的电梯(BFS/DFS)
- 下一篇: p1605迷宫(DFS应该注意的问题)