\(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...