Increase and Copy(公式 數學)

2021-10-10 04:04:14 字數 879 閱讀 5124

t組資料,每組給乙個n,原始序列為1,每次可以進行如下兩個操作之一,問使序列和大於等於n,至少需要多少次操作。

在序列中將乙個數增加1

選擇序列中乙個數將其新增到序列尾

首先明確一點,最優解一定是先將1加到某個數x,再將x不斷新增到序列中直到和大於等於n,(因為假設出現先新增此數到序列中,再將此數加1的情況,我們將其操作順序反轉,得到的貢獻值一定是變大的)。

那麼我們的問題就變成了尋找到此界限x,使總算子最小。(其實這裡已經可以猜測為對勾函式)

首先,將1變到x,需要x-1步操作,其次,將x數複製y份直到總和≥n,因此此處需要的運算元簡單推導為(n+(x-1))/x-1,與前面的步驟相加化簡即為x+(n-1)/x-1,前面則為對勾函式,函式最小值在根號(n-1)處取到,但由於我們運算元為整數步,因此我們需要取x為(int)sqrt(n-1)和(int)sqrt(n-1)+1兩個值取較小值。代入函式即為答案。

#include

#include

#include

#include

#include

#include

using

namespace std;

int t,n;

intmain

(void

)int p1=

sqrt

(n-1);

int p2=p1+1;

int ans=

min(

(p2+

(n-1

)/p2-1)

,(p1+

(n-1

)/p1-1)

);cout<}//system("pause");

return0;

}

Catalan數公式推導

如何把下列遞迴公式 f n f 0 f n 1 0 f 1 n 1 1 f 2 f n 1 2 f n 1 0 f 0 轉化為 f n c 2n,n n 1 可以利用母函式 發生函式 令g x f 0 f 1 x f 2 x 2 那麼遞迴公式左邊就是g x 的n次項係數。右邊是g x 2的n 1次項...

記公式 卡特蘭數

卡特蘭數 就是n個數按照1 n的順序進棧,出棧後所有排列的總數。卡特蘭數滿足乙個遞推公式 h 1 1 h n h n 1 4 n 2 n 1 其中n表示數的個數。最好記住這個公式。適用的題目型別 已經標好1 n的序號,求打亂順序排列的總方法數 配對排列 變相的打亂順序排列 說白了,就是求進出棧的全排...

高數積分導數公式

積分公式彙總 導數公式 1 古典微積分 這是一種直觀 便於理解的定義。首先定義微分是微小變化量。比如函式y f x 中dx是x的微小變化量,那麼dy就是dx對應的y的微小變化。導數也就從中得到了定義 是兩個微小變數的比值 dy dx。所以導數也被稱為微商。這是古典定義,可以看出是非常容易理解的。y ...