本題思路和**
1.純遞迴
設函式func(int n, int m) 定義為計算 把整數 n 劃分為 小於或等於 m 的一系列數字之和 的劃分方法有多少種,則對於:
(1)當 n == 1 時,無論 m 取何值,都只能 劃分為 1;
(2)當 m == 1 時 ,無論 n 為何值, 也只能劃分為 n 個 1 相加 ,只有一種劃分方法;
(3)當 n < m, 顯然 func(n, m) = func(n , n);
(4)當 n > m 時, 可分兩種情況討論,
(1)劃分中包含 m 時, 有func(n -m, m) 種劃分方法;
(2)劃分中不包含 m 時, 有 func(n, m-1)種劃分方法;
所以 func(n ,m) = func(n -m, m) + func(n, m-1);
(5)當 n == m 時,當劃分包含 m 時, m = m ,只有一種劃分方法;
當 不包含 m 時, 有 func(n, m-1) 種劃分方法。
根據以上分析:
func( n, n ) = 1, 當 n ==1;
func( n, n ) = 1, 當m == 1;
func( n, n ) = func( n,n ) , 當n < m;
func( n, n ) = func( n, m-1) +1 , 當n == m;
func( n, n ) = func ( n - m, m ) + func ( n , m -1) , 當n > m;
相應的**如下:
/*
* 1.cpp
* * created on: 2023年9月01日
* author: administrator
*/#include
using
namespace std;
intfunc
(int n,
int m)
else
if(n < m)
else
if(n == m)
else
if(n >= m)
}int
main()
return0;
}
簡單的整數劃分問題
總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n...
簡單整數劃分問題
1.純遞迴 設函式func int n,int m 定義為計算 把整數 n 劃分為 小於或等於 m 的一系列數字之和 的劃分方法有多少種,則對於 1 當 n 1 時,無論 m 取何值,都只能 劃分為 1 2 當 m 1 時 無論 n 為何值,也只能劃分為 n 個 1 相加 只有一種劃分方法 3 當 ...
openjudge 簡單的整數劃分問題
100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n 0 n 5...