nyoj90 整數劃分 動態規劃與分治解法

2021-07-29 18:38:11 字數 598 閱讀 8231

//dp**

//dp[i][j]表示j劃分為i份的次數(也叫做j的i劃分)

//考慮n的m劃分為a[0]+a[1]+a[2]+...+a[m]=n即dp[m][n]

//1.如果每個a[i]都大於0,令每個a[i]都減1(共減去m個1),那麼a[0]+a[1]+a[2]+...+a[m]=n-m於是就轉化為n-m的m劃分即dp[m][n-m]

//2.如果存在a[i]=0, 那麼可以刪除a[i],於是就轉化為n的m-1劃分即dp[m-1][n]

//於是轉移方程式為:dp[i][j] = dp[i][j-i] + dp[i-1][j];

#include int dp[12][12];

int main()

} printf("%d\n", dp[n][n]);

} return 0;

}

//分治演算法

#include int f(int n, int m) //fun(n, m)代表n的所有劃分中,最大加數不大於m的劃分個數

int main()

return 0;

}

nyoj 90 整數劃分

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

NYOJ 90整數劃分

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1,k 1。正整數n的這種表示稱為正整數n的劃分。求正整數n的不 同劃分個數。例如正整數6有如下11種不同的劃分 6 5 1 4 2,4 1 1 3 ...

NYOJ 90 整數劃分

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 輸入第一行是測試資料的數目m 1 m 10 以下每行均包含乙個整數n 1 n 10 輸出輸出每組測試資料有多少種分法。樣例輸入 1 6樣例輸出 11描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1...