一本通 P1799 數列

2022-03-15 16:16:39 字數 1226 閱讀 9282

\(f_0\)

\(f_1\)

\(f_2\)

\(f_3\)

\(f_4\)

\(f_5\)

\(f_6\)

\(f_7\)

\(f_8\)

\(f_9\)

\(f_\)00

021032

84198

438932

1936

我們發現

\[f_i=2f_+(i-1)* (i-2)

\]我們可以設

\[g_i=i * (i-1)\]則

\[g_i=i*(i-1)=(i-1) * (i-2)+2(i-1)=g_+2(i-1)\]則

我們可以推出初始矩陣

\[\begin& f_0&g_0&0&1 & \end=\begin& 0&0&0&1 & \end

\]第乙個數是\(f_0\),第二個數是\(g_0\),第三個數是i,第四個數是1。

以及轉移矩陣

\[\begin

& 2&0&0&0 & \\\\

& 1&1&0&0 & \\\\

& 0&2&1&0 & \\\\

& 0&0&1&1 &

\end\]

第一行對應的是\(f_0\),第二行對應的是\(g_0\),第三行對應的是i,第四行對應的是1。

對於題目給出的\(10^\),本蒟蒻因為太弱,不想打高精,想到了使用類似於快速冪的方法,因為$an=(a)^* a^y (10* x+y=n) $

可以直接避免高精

於是,我們就可以寫出**

#include#include#include#define re register

#define ll long long

using namespace std;

const int n=1e7+10,mod=1e9+7;

struct matrix

inline matrix operator *(const matrix &b)

templateinline matrix operator ^ (t b)

return res;

} inline void print()

return;

}} a,b,f;

int n;

char s[5010];

int main()

P1799 數列 NOI導刊2010提高(06)

這道題就是求通過刪除數字得到乙個新序列,從而與 1,2,3,4,序列所能形成最多的匹配。在題解翻到了兩種做法 傳統dp 設 dp i j 為從原序列中的前 i 位取 j 個數所能形成的最多匹配。注意 匹配的條件是 a i j 因為我們求的是新序列,新序列中第 j 位所期望的數字就是 j 如果成立,那...

一本通 1 1 練習 1 數列極差

題目傳送門 這題也是典型的貪心演算法題。對於這個問題 先通過例項來認識問題所描述的計算過程。令 n 3 取數列 3,5,7 可能有下面三種情況 3 5 1 7 1 113 3 7 1 5 1 111 5 7 1 3 1 109 由此可見先運算小資料的到的是最大值,先運算大資料得到的是最小值。故針對此...

一本通 1 1 練習 2 數列分段

題目link 首先對於乙個序列,從 a 1 l 都符合最佳序列,假設對於第 l 1 個數,它放到從 l 1 r 的區間是一種最優的方法,並且它也可以放在從 1 l 1 這裡,那麼根據貪心,它放到 1 l 1 的序列中是合法的,而且也是一種最優方案。因此,這道題只需要貪心 能將當前數往左放就往左放。1...