演算法分享 動態規劃之拱橋回文演算法

2021-09-29 10:19:06 字數 1279 閱讀 6631

求滿足條件的所有回文數

條件:回文數總和為n(1=回文數中間的值不小於左邊/右邊的數字

例子:n=6,k=3;可能的序列[1,1,1,1,1,1],[1,1,2,1,1],[1,2,2,1],[2,2,2],[3,3] ; 答案為: 5

n=8,k=3;可能的序列[1,1,1,1,1,1,1,1],[1,1,1,2,1,1,1],[1,1,2,2,1,1],[1,2,2,2,1],[2,2,2,2][1,3,3,1] ; 答案為: 6

思路:確定回文數中間位置的值

確定了中間位置的值後,求回文數左邊可能的序列 (即求左邊滿足不遞減數列的個數)

思路過程: n=8,k=3

中間值k=1, 回文序列有且只有一種可能 (1 1 1 1 1 1 1 1)

中間值k=2, 個數為1: 序列格式為: ;

除去中間值,左右兩邊的序列和是 num = n-k1; num如果為奇數,則無法形成回文數,因為回文數兩邊相等;

當num為偶數,那麼左邊的序列為num/2;此時需要求序列和為num/2的所有不遞減序列之和。

=> num=6, num/2=3, 和為3的不遞減序列:(1 1 1),(1 2); 因此中間值k=2,個數為1, n=8的回文數序列,

中間值k=2, 個數為2: 序列格式為: ;

除去中間值,左右兩邊的序列和是 num = n-k2; num如果為奇數,則無法形成回文數,因為回文數兩邊相等;

當num為偶數,那麼左邊的序列為num/2;此時需要求序列和為num/2的所有不遞減序列之和。

===> num=4, num/2=2, 和為3的不遞減序列:(1 1),(2); 因此中間值k=2,個數為2, n=8的回文數序列,

以此類推…

演算法之動態規劃

一 思想 首先要了解 動態規劃 必須先知道什麼叫做 多階段決策 百科裡面對這個問題解釋的很全,我就load一段出來,大家得要好好品味,好好分析。上面圖中最後一句話就定義了動態規劃是要幹什麼的問題。二 使用規則 現在我們知道動態規劃要解決啥問題了,那麼什麼情況下我們該使用動態規劃呢?最優化原理 最優子...

演算法之動態規劃

鋼條切割問題 鋼條切割問題出現在 演算法導論 一書第204頁,作為動態規劃的例題出現,該題內容如下 serling公司購買長鋼條,將其切割為短鋼條 切割工序本身沒有成本支出。公司管理層希望知道最佳的切割方案。假定我們知道serling公司 一段長為i英吋的鋼條的 為pi i 1,2,單位為美元 鋼條...

演算法實驗之動態規劃

設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢,可以實用的各種面值的硬幣個數不限。當只用硬幣面值t 1 t 2 t i 時,可找出錢數j的最少硬幣個數記為c i,j 若只用這些硬幣面值,找不出錢數j時,記c i,j 輸入結果儲存在1.txt中,輸出結果儲存在2...