UVa11384正整數序列 遞迴,二分

2022-09-23 09:30:13 字數 345 閱讀 3052

題目大意:

有乙個從1、2、3、.......n的正整數數列,現在要通過若干次操作將這個數列全部變為0,操作的方法是每次選取任意1個或多個任意位置的數,然後將這幾個數同時減去乙個乙個數。問至少要經過多少次操作才能讓數列全部變為0

思路:在紙上試幾個數就可以發現,比如6時,456同時減去4這個中間數,剩下123012其實只取決於123這部分f(6) = f(3) + 1。

所以有:f(n) = f(n/2) + 1,邊界是f(1) = 1。

#include

using namespace std;

int f(int n)

int main()

cout<

Uva 11384 正整數序列

題意 給定正整數 n,用最少的操作把序列 1,2,n 全部變成 0 操作是 每次可以從序列中選擇乙個或者多個,同時減去乙個相同的數。其實是乙個遞迴分治的思想,把一部分數字選出來,同時一減,結果就變成了前面沒有減過的了,數量不影響結果,反正可以一次拿出很多來操作。那麼怎麼選擇,使得 n 到 x 的時候...

滿足條件的正整數序列

問題描述 小明想知道,滿足以下條件的正整數序列的數量 第一項為 n 第二項不超過 n 從第三項開始,每一項小於前兩項的差的絕對值。請計算,對於給定的 n,有多少種滿足條件的序列。輸入格式 每一行包含乙個整數n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以10000的餘數。樣例輸入 ...

OJ 1036 正整數序列

描述 給定正整數n,你的任務是用最少的運算元把序列1,2,3,n 1,n都變成0.每次操作可從序列中選擇乙個或多個整數,同時減去乙個相同的正整數.比如1,2,3可以把2,3同時減去2,變成1,0,1.輸入多組測試資料,每組僅一行,為正整數n.1 n 10 9 輸出對於每組資料輸出最少的操作次數 輸入...