hdu 2709整數劃分 技巧

2022-07-18 08:42:09 字數 511 閱讀 8440

整數劃分變形,由2^k組成。

整數劃分中乙個節約記憶體的技巧,平時我們使用dp[i][j]維護用不大於j的陣列合成i的方案數,所以必須dp[i-j][j]->dp[i][j]。這樣就需要二位,如果用一維dp[i-j]->dp[i]就會導致重複選取的情況。其原因在於dp[i-j]在計算的過程已經把大於j的組合求完了,就會重複。那麼很自然地想到把j地遍歷放在外面,這樣每次求解的時候,dp[i-j]必然只求解了小於等於j的情況。

#include #include 

#include

#include

#define ll int

const ll mod=1000000000

;const ll n=1000006

;ll dp[n];

ll bit[

22];

using

namespace

std;

intmain()

while(cin>>n)

}

整數的分劃問題

對於乙個正整數n的分劃,就是把n表示成正整數之和的表示式。主要,分劃與順序無關,例如6 5 1和6 1 5被認為是同一種分劃。解題思路 定義乙個函式q n,m 表示正數n的 任何加數都不超過m 的分劃的數目,n的所有分劃數目p n 就應該表示為q n,n 一般的q n,m 有如下遞迴關係 1 q n...

遞迴求解整數的分劃問題

整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都涉及到。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 m3 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果 中的最大值不超過m,即max m,則稱它屬於n的乙個m劃分。這裡我們記n的m劃...

遞迴 OpenJudge 7215 簡單整數劃分

簡單的整數劃分問題 總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組...