nyoj90 整數拆分(遞迴,揹包兩種解法)

2021-06-07 15:29:52 字數 604 閱讀 7294

題目:

把乙個整數拆分成的所有情況。

遞迴**:

#include#includeusing namespace std;

int z[11];

int zh(int n,int m)

}

最近在做動態規劃的時候發現這個題目也可以用揹包來些,並且比用遞迴喜惡簡單的多。效率也高很多。

動態轉移方程:dp[i]=dp[i]+dp[i-j];

**如下:

#include#include#include using namespace std;

int main()

{ int t;cin>>t;

while(t--)

{ int n,m;

cin>>n;

int ans[21];

memset(ans,0,sizeof(ans));

ans[0]=1;

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(i<=j)

ans[j]=ans[j]+ans[j-i];

cout<

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...