我們要求找出具有下列性質數的個數(包含輸入的自然數 \(n\) ):
先輸入乙個自然數 \(n(n \le 1000)\) ,然後對此自然數按照如下方法進行處理:
不作任何處理;
在它的左邊加上乙個自然數,但該自然數不能超過原數的一半;
加上數後,繼續按此規則進行處理,直到不能再加自然數為止.
1個自然數 \(n(n \le 1000)\)
1個整數,表示具有該性質數的個數。
我們可以使用動態規劃來解決這個問題。
我們令 \(f[i]\) 表示自然數 \(i\) 能夠生成的數的個數,則:
\(f[i] = 1 + \sum_^ f[j]\)
實現**如下:
#include using namespace std;
const int maxn = 1010;
int n, f[maxn];
int main()
cout << f[n] << endl;
return 0;
}
總結:這是一道動態規劃入門題,可以用遞推、遞迴做(不過遞迴做的時候不要忘了開備忘錄)。 洛谷 P1028 數的計算 題解 分析
由於洛谷的畫風超可愛qaq,我就不往過搬磚了,顯得醜,題目看原位址叭。題目鏈結在此 這是試煉場過程函式與遞迴的乙個簡單題,而我的遞推思路卻沒有能寫出來,這方面練的太少呀,我也意識到了這可是最最基礎的本領,所以還是多寫題 雖然都是很水的題 emmmm。我們以6來舉例 f 1 1 f 2 2 f 1 1...
洛谷P1028數的計算題解 zhengjun
題目描述 我們要求找出具有下列性質數的個數 包含輸入的自然數n nn 先輸入乙個自然數n nn n 1000 n le 1000 n 1000 然後對此自然數按照如下方法進行處理 不作任何處理 在它的左邊加上乙個自然數,但該自然數不能超過原數的一半 加上數後,繼續按此規則進行處理,直到不能再加自然數...
洛谷P1028 數的計算
我們要求找出具有下列性質數的個數 包含輸入的自然數n 先輸入乙個自然數n n 1000 然後對此自然數按照如下方法進行處理 1.不作任何處理 2.在它的左邊加上乙個自然數,但該自然數不能超過原數的一半 3.加上數後,繼續按此規則進行處理,直到不能再加自然數為止.輸入格式 乙個自然數n n 1000 ...