問題描述:給定乙個正整數的集合a=,是否可以將其分割成兩個子集合,使兩個子集合的數加起來的和相等。例a = 可以分割: 及
input
第一行集合元素個數n n <=300 第二行n個整數
output
如果能劃分成兩個集合,輸出任意乙個子集,否則輸出「no」
sample input
51 3 8 4 10
sample output
3 10
用乙個二維陣列dp[ i ][ j ]儲存前i個數中有幾組相加等於j(j<=sum/2),相當於i表示輸入的資料,j表示mid的值,a [ ]用於儲存輸入的資料,從a[1]開始儲存,預設賦值dp[0][j]=0 ,dp[i][0]=1,dp[0][0]=1。
關鍵演算法 :如果 j=a[i] dp[i][j]=dp[i-1][j](第i個數不加入集合)
特殊情況:如果a[i]=0,dp[i][j]=dp[i-1][j].
找同組數:反向搜尋dp[i][mid],如果dp[i][mid]!=dp[i-1][mid]時對應的a[i]可以存在於兩個相等集合中的乙個集合中,找第二個數是只需將mid的值變化為mid-a[i]再用類似方法查詢即可。
劃分數 動態規劃
題目 有n個無區別的物品,將它們劃分成不超過m組,求出劃分方法數模m的餘數。限制條件 1 m n 1000 2 m 10000 輸入 n 4 m 3m 10000 輸出 4 dp i j j的i劃分的總數 遞推關係 遞推關係的難點在於不重複。我們採用一種標準將問題化為子問題,這個標準需要用到一種新的...
整數劃分 劃分數(DP動態規劃)
給你乙個正整數n,讓你計算出n的m劃分有幾種方法。思路 定義dp i j 為i的j劃分,即將i劃分為j個數字之和的方案數。1 當j i時,此時,劃分個數不超過i,此時是正常的劃分。劃分的結果一定只有兩種型別 一種是j個數字,都大於0。另一種是有0,即不夠劃分j個,用0來湊的。j個數字中存在0的,其實...
演算法 劃分數 動態規劃
題目 劃分數有n個無區別的物品,將他們劃分成不超過m組,求出劃分方法數模m的餘數。限制條件 1 m n 1000 2 m 10000 輸入 輸入 n,m,m分別代表n個物品 m個組 對m取模。輸出 輸出劃分方法數對m取模的餘數。樣例輸入 4 3 1000 樣例輸出 4所有可能的情況都可以看作是把n劃...