整數劃分模型

2022-06-19 08:09:11 字數 930 閱讀 9438

狀態 \(f[i][j]\) 表示 將\(i\)劃分為\(j\)的方案數

對於方案數,一般是由地推式子推的,

對於我們考慮最後乙個盒子放的數為 \(1\) 或 \(!1\),

那麼最後乙個數為 \(1\) 時,由於是第 \(j\) 列,那麼他的方案數就是 \(j-1\)列的方案數,當前這一列就放乙個,對於前面的方案數不受影響

即\(f[i-1][j-1]\)

當最後一位數是非 \(1\)時,\(1-j\) 每個數至少大於 \(1\),如果將每個數都減一,方案數變嗎,答案是不變

因為對於每種可能,\(1-j\) 上的數都是大於 \(1\) 的,那麼減一併不會影響劃分

\(f[i-j][j]\)

所以轉移時為\(f[i][j]=f[i-1][j-1]+f[i-j][j]\)

考慮最後一位為 \(1\) 的情況

上乙個是 \(f[i-1][j-1]\) ,假若這個式子的方案數中有存在相同的 \(1\),是不符合條件的

有第乙個題的第二中情況同理可知

\(dp[i-j][j]\)可以轉移答案,我令\(j=j-1\) ,那麼式子成為 \(f[i-(j-1)][j-1]\), 前\(j-1\)的方案數是這個,那到\(j\)上就乙個 \(1\)不會差生影響,就是從\(i\)拿個1而已

則有\(f[i-1-(j-1)][j]=f[i-j][j]\),注意這的第二唯,因為後面多了乙個方一的盒子,所以\(j-1\)變成了\(j-1+1\)

為什麼這樣就沒有重複的 \(1\) 呢,

因為這個式子(第一問第二種請狂)的原型是 \(f[i-j][j]\) 他是什麼情況?,每一列上的數都是大於\(1\)的,我只不過最後麵多加乙個盒子(j+1),裡面剛好放的是 \(1\)而已,前面的 \(j\)的盒子的數有\(1\)嗎

所以式子為\(f[i][j]=f[i-j][j-1]+f[i-j][j]\)

就會這兩個(逃

整數劃分(劃分dp)總結

寫了幾個題發現整數劃分是一類題,而不是一道題。具體題型 1 n相同元素放入m個相同的盤子 盤子允許為空 例題 放蘋果 poj 1664設dp i j 為 j 個元素放入i個盤子轉移方程 dp i j dp i 1 j 新新增乙個盤子,盤子為空 dp i j dp i j i i個盤子 各取出乙個 2...

整數劃分問題

整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...

整數劃分問題

給定乙個自然數,分成k部分,a1,a2.的數的和,要求a1 a2.求有多少種?原理 整數n拆分成最多不超過m個數的和的拆分數,和n 拆分成最大不超過m的拆分數相等。根據這個原理,原問題就轉化成了求最大拆分為k的拆分個數與最大拆分為k 1的拆分個數的差 f n,k f n,k 1 f n k,k 如下...