藍橋杯 數的劃分 記憶搜尋解法

2021-10-02 05:55:09 字數 1099 閱讀 3070

乙個正整數可以劃分為多個正整數的和,比如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...