數的計數 Noip2001

2022-05-30 07:51:10 字數 1741 閱讀 7561

我們要求找出具有下列性質數的個數(包括輸入的自然數n)。先輸入乙個自然數n(n≤1000),然後對此自然數按照如下方法進行處理:

不作任何處理;

在它的左邊加上乙個自然數,但該自然數不能超過原數的一半;

加上數後,繼續按此規則進行處理,直到不能再加自然數為止。

自然數n(n≤1000)。

滿足條件的數。

6
6

看完題目以及樣例輸入與輸出,本人便把這6種情況列舉了出來:

6

1626

12636

136那麼就特別簡單,設乙個函式dfs,一直遞迴「1~引數/2」,每次遞迴的同時增加符合條件的數的數量即可:

【方法一】遞迴f(n)=1+f(1)+f(2)+···+f(n/2)

#include#include#include#include#include#includeusing namespace std;

int num=0;

int dfs(int n)

}int main()

提交後,情況如下:

測試點 1:    答案正確460kb3ms 

測試點 2:答案正確464kb3ms 

測試點 3:答案正確456kb2ms 

測試點 4:答案正確464kb2ms 

測試點 5:答案正確476kb4ms 

測試點 6:答案正確456kb2ms 

測試點 7:答案正確464kb2ms 

測試點 8:答案正確452kb2ms 

測試點 9:答案正確468kb310ms 

測試點10:執行超時456kb994ms 

反正第9、10個點不知道已經跑到哪去了,耗時十分離譜

那麼,往下看

【方法二】記憶化搜尋

#include#include#include#includeusing namespace std;

const int sb=-1438;

int num[2000];

void dfs(int n)

}int main()

數的計數 Noip2001

1 include2 include3 using namespace std 4int main 518 a s 19 20 cout 21return0 22 w 數的計數 noip2001 w 問題描述 w我們要求找出具有下列性質數的個數 包括輸入的自然數n 先輸入乙個自然數n n 1000 ...

1316 數的計數 Noip2001

我們要求找出具有下列性質數的個數 包括輸入的自然數n 先輸入乙個自然數n n 1000 然後對此自然數按照如下方法進行處理 不作任何處理 在它的左邊加上乙個自然數,但該自然數不能超過原數的一半 加上數後,繼續按此規則進行處理,直到不能再加自然數為止。自然數n n 1000 滿足條件的數。6 滿足條件...

NOIP 2001 數的劃分

問題描述 將整數 n 分成 k份,且每份不能為空,任意兩份不能相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。問有多少種不同的分法。輸入 n,k 輸出 乙個整數,即不同的分法。樣例 輸入 7 3 輸出 4 四種分法為 6 n 200,2 k 6 記 f i,j 為 k i n j...