乙個正整數可以劃分為多個正整數的和,比如n=3時:
3;1+2;1+1+1;
共有三種劃分方法。
給出乙個正整數,問有多少種劃分方法。
輸入格式
乙個正整數n
輸出格式
乙個正整數,表示劃分方案數
樣例輸入
樣例輸出 資料規模和約定n<=100
n 個 1 對應的情況是:每乙份劃分的值不大於 1
n 加 0 對應的情況是:每乙份劃分的值為 n
如果我們想將 x 分割為若干份,每乙份分割的值 <= max,那麼有兩種情況:
x >= max 時: 又有兩種情況
如果其中乙份分割的值為max (這乙份的分法已經確定),剩下的所有分割之和為 x-max,那麼問題就被分割為子問題:即求解 【x-max 可以被分割成值不超過 max 的若干分割塊】的分法數目
如果每乙份分割的值都小於max,那麼問題的解就變成:【將x分割為若干份,每乙份分割的值不超過max-1】的分發數目 x >= max 情況的解就是上面兩個情況的解之和
x < max 時: 【將 x 分割為若干分,每乙份分割的值不超過max】的分法的數目 = 【將x分割為若干分,每乙份分割的值不超過 x 】 的分法的數目,於是問題變為求解【將x分割為若干分,每乙份分割的值不超過 x 】的分法數目
#include
#include
using
namespace std;
int res[
114]
[114]=
;// 返回將n分割成若干塊,每一塊的值<=max 的分法數目
intnum
(int x,
int max)
if(x >= max)
else
int r2;
if(res[x-max]
[max]
)else
return r1 + r2;
}else
else}}
intmain()
藍橋杯 演算法練習 數的劃分
這個題目感覺到了用動態規劃,但是奈何組合數學的不好,沒有寫出狀態轉移方程 參考乙個博主的部落格,寫出了滿分 還特意搜了一下斯特林數,學到了學到了 詳細解答在博主的部落格裡 鏈結如下 這是一道不太一樣的dp題,他的邊界在遞推的中間,而且還要注意每一維度的範圍,否則知道狀態轉移方程也寫不出來 算是比一般...
藍橋杯 演算法訓練 數的劃分
問題描述 將整數n分成k份,且每份不能為空,任意兩份不能相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 n,k輸出格式 乙個整數,即不同的分法 樣例輸入 7 3樣例輸出 4 資料規模和約定 6 講道理自己第一眼看...
藍橋杯 ALGO 22演算法訓練 數的劃分
問題描述 將整數n分成k份,且每份不能為空,任意兩份不能相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 n,k輸出格式 乙個整數,即不同的分法 樣例輸入 7 3樣例輸出 4資料規模和約定6 分析 遞迴問題,ste...