【矩陣加速】【數學】2019雅禮集訓 math
題目:
簡單地說,就是對於n的每一個長度為m的劃分(
ki>0),求出其貢獻的值之和。
分析:
非常神奇的三角函式題:
首先,可以想到,劃分問題有一個很經典的DP
定義
DP(i,j)表示將i劃分為j個的方案數。
轉移式為:
DP(i,j)=DP(i−1,j−1)+DP(i−j,j)。即考慮劃分狀態中存在/不存在1的情況。存在1,則通過去掉那個1轉移,不存在1,則通過每一位-1來轉移。
考慮將這個DP方式套在這裡:
定義
f(i,j)表示將n=i,m=j時的答案。
若m項中,存在1,則轉移到
f(i−1,j−1)∗sin(x)
若不存在1,此時不必所有項都-1,只需要某一項-1就能轉移了:
首先通過和角公式得到:
sin(kix)=sin((ki−1)x)cos(x)+cos((ki−1)x)sin(x)
其中前半部分 sin((ki−1)x)就是我們要的,但後半部分還不對。
繼續運用和角公式:
sin(x)cos((ki−1)x)=sin(x){cos((ki−2)x)cos(x)−sin((ki−2)x)sin(x)}
把
sin(x)乘進去
=sin(x)cos(x)cos((ki−2)x)−sin2(x)sin((ki−2)x)
因為
sin2(x)=1−cos2(x)
=cos(x){sin(x)cos((ki−2)x)+cos(x)sin((ki−2)x)}−sin((ki−2)x)
顯然大括號裡面的也是個和角公式。
=cos(x)sin((ki−1)x)−sin((ki−2)x)
綜上所述:
sin(kix)=2cos(x)sin((ki−1)x)−sin((ki−2)x)
換言之:
f(i,j)=2cos(x)f(i−1,j)−f(i−2,j)
再加上之前的存在1的情況。
就是
f(i,j)=2cos(x)f(i−1,j)−f(i−2,j)+
相關推薦
【矩陣加速】【數學】2019雅禮集訓 math
題目: 簡單地說,就是對於n的每一個長度為m的劃分( k i
【2019雅禮集訓】【可持久化線段樹】【模型轉化】D1T2Permutation
目錄 題意 輸入格式 輸出格式 思路 程式碼 題意 給定一個長度為n的序列A[],你需要確定一個長度為n的排列P[],定義當前排列的值為: \[\sum_{i=1}^{n}{A[i]P[i]}\] 現在給定一個整數k,需要你求出,在所有可能的排列中(顯然有n!種),最小的k個"
【2019雅禮集訓】【最大費用流】【模型轉換】D2T3 sum
目錄 題意 輸入格式 輸出格式 思路 程式碼 題意 現在你有一個集合{1,2,3,...,n},要求你從中取出一些元素,使得這些元素兩兩互質。問你能夠取出的元素總和最多是多少? 輸入格式 一個整數n 輸出格式 一個整數表示能夠選出的最大的元素總和。 思路 這道題居然
【可持久化線段樹】2019雅禮集訓 permutation
題目: 分析: 比較噁心的一道題。 首先,將式子轉化一下,變成 ∑ A
【2019雅禮集訓】【第一類斯特林數】【NTT&多項式】permutation
目錄 題意 輸入格式 輸出格式 思路: 程式碼 題意 找有多少個長度為n的排列,使得從左往右數,有a個元素比之前的所有數字都大,從右往左數,有b個元素比之後的所有數字都大。 n<=2*10^5,a,b<=n 輸入格式 輸入三個整數n,a,b。 輸出格式 輸出
【線段樹】2019雅禮集訓 sequence
題目: 給出k,和一個長度為n的序列A 有q次詢問, 每次詢問 A l
【Trie樹】【啟發式合併】2019雅禮集訓 matrix
題目: 定義一個矩陣的貢獻為:其互不相同的行的種類數。 給出一個矩陣,求其所有子矩陣的貢獻和。 分析: 可以把每一行拿出來,弄成一個字串,建一顆Trie樹出來。 此時,就可以算出以最左端為左邊界的所有子矩陣的貢獻。 算完後,把第一層節點合併,相當於去除了第一列的
【費用流】【求證明】2019雅禮集訓 sum
題目: 在不超過n的數中,選出一個集合,使得集合內部元素兩兩互質,且集合元素總和儘可能大。 分析: 神奇的性質題。 出題人不會證,問了一堆大佬也不會。 哈(那麼證明就留給讀者來完成) 性質是: 1、每個元素最多隻有兩個質因子。 2、若有兩個質因子,一定有一個大
【點分治】【FFT】2019雅禮集訓 bracket
題目: 分析: 太過套路這裡就簡單說說 顯然,當詢問數k很小時,就是個裸的點分治題。 現在k變大了。那就FFT算貢獻。 #include<cstdio> #include<cstring> #include<cmath> #in
2019雅禮集訓 D1T3 math [咕咕咕]
題目描述: 樣例: input: 2 3 5 0.01 3 6 0.02 output: +2 +4 資料範圍: 標籤: 數學,矩陣乘法 題解: 標程: #include<cstring> #include<algorithm> #include<cs
2019雅禮集訓 D2T1 two [模擬,線段樹]
題目描述: 樣例: input: 5 1 1 1 1 4 2 1 1 3 output: Blue 3 Red 1 3 Blue 1 2 Red 2 資料範圍: 標籤:模擬,線段樹 沒錯,你沒有看錯,這題標籤就是模擬。 然而我還是不會做 首先很容易想到用dfs序判斷一個點是否在另一
2019雅禮集訓 D2T3 sum [結論,費用流]
題目描述: 樣例: input: 10 output: 30 資料範圍: 標籤:結論,費用流 一道結論題,然而講題的大佬忘記怎麼證明了,做出來的也不會證…… 結論:每個選入集合的數都最多有兩個質因數,且一個大於\(\sqrt{n}\),一個小於\(\sqrt{n}\) 於是,我們只
2019雅禮集訓 D4T1 w [費用流]
題目描述: 樣例: input1: 4 1 2 1 2 3 4 1 2 1 3 3 4 1 2 2 3 1 4 2 1 3 4 1 1 2 3 output1: 9 input2: 5 1 1 3 99 99 100 2 1 2 1 3 3 4 3 5 1 3 1 2 2 4 2 5 2 1 2
2019雅禮集訓 D4T3 n [咕咕咕]
題目描述: 樣例: input: 4 2 0 0 0 1 1 1 1 0 output: 1.0000000000 資料範圍與約定: 標籤:計算幾何(吧,不是很懂) 題解: 全場唯一AC程式碼: #include <bits/stdc++.h> using std:
2019雅禮集訓 D5T1 matrix [字典樹]
題目描述: 樣例: input: 2 2 1 1 1 2 output: 11 資料範圍與約定: 標籤:字典樹 嗯……這題我還是有些懵逼…… 大概意思就是列舉左端點,利用上一次的字典樹得到當前的字典樹。 每個節點裡存兒子的編號、哪些行在這裡出現過,以及當前節點對答案的貢
2019雅禮集訓 D7T1 inverse [概率/期望,DP]
line n-1 gist i+1 大於 spa input names pac 題目描述: 樣例: input1: 3 1 1 2 3 output1: 833333340 input2: 5 10 2 4 1 3 5 output2: 62258360 數據範圍
2019雅禮集訓 D7T3 convex [咕咕咕]
題目描述: 樣例: input1: 5 2 4 2 7 5 7 5 4 3 -2 output1: 90 input2: 4 -1000000000 1000000000 1000000000 1000000000 1000000000 -1000000000 -1000000000 -10000
2019雅禮集訓 D7T2 subsequence [DP,平衡樹]
dot head emp 可能 pac 我們 方程 rotate ima 題目描述: 樣例: input1: 5 -2 -8 0 5 -3 output1: 5 10 13 2 -13 input2: 6 -10 20 -30 40 -50 60 output2:
2019雅禮集訓 D8T3 union [主席樹]
範圍 相減 inf code dfs out 分類 main input 題目描述: 樣例: input: 12 1 1 1 4 1 1 5 2 8 1 6 output: 3 6 11 6 7 6 11 8 11 11 11 11 數據範圍與約定:
2019雅禮集訓 D8T1 union [咕咕咕]
題解 output con bits print esp return opc pri 題目描述: 樣例: input: 3 2 3 4 output: 50 數據範圍與約定: