我們要求找出具有下列性質數的個數(包括輸入的自然數n)。先輸入乙個自然數n(n≤1000),然後對此自然數按照如下方法進行處理:
不作任何處理;
在它的左邊加上乙個自然數,但該自然數不能超過原數的一半;
加上數後,繼續按此規則進行處理,直到不能再加自然數為止。
自然數n(n≤1000)。
滿足條件的數。
6
66看完題目以及樣例輸入與輸出,本人便把這6種情況列舉了出來:
1626
12636
136那麼就特別簡單,設乙個函式dfs,一直遞迴「1~引數/2」,每次遞迴的同時增加符合條件的數的數量即可:
【方法一】遞迴f(n)=1+f(1)+f(2)+···+f(n/2)測試點 1: 答案正確460kb3ms#include#include#include#include#include#includeusing namespace std;
int num=0;
int dfs(int n)
}int main()
提交後,情況如下:
測試點 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...