1. 程式人生 > >整數拆分 - dp - 拉格朗日插值

整數拆分 - dp - 拉格朗日插值

神仙題
題目大意:
定義 f m ( n ) f_m(n) 為可重集合S的個數,其中S滿足S的元素都是m的非負整數次冪,並且S的元素和是n。
定義 g

m 1 ( n ) = f m (
n ) , g m k ( n ) =
i = 0 n g m k 1 ( n ) f m ( n ) , k 2 g_m^1(n)=f_m(n),g_m^k(n)=\sum_{i=0}^ng_m^{k-1}(n)f_m(n),k\geq2 ,求: i = 0 n g m ( i ) \sum_{i=0}^ng_m(i) n , m 1 0 18 , k 20 n,m\le10^{18},k\le20
題解:
考慮 f m ( n ) f_m(n) 其實是,你有 1 , m , m 2 , m 3 , 1,m,m^2,m^3,\dots ,用這些數字拼出 n n 的方案數,並且這些數字是無序的(即 m m 要出現在 1 1 之後, m 2 m^2 m m 之後)。

如果要求 g m k ( n ) g_m^k(n) ,那麼其實是,你先將 n n 表示成 n = i = 1 k x i n=\sum_{i=1}^k x_i ,然後每個 x i x_i 1 , m , m 2 , m 3 , 1,m,m^2,m^3,\dots 表示出來,加起來就是,要用: 1 , m , m 2 , m 3 , , 1 , m , m 2 , m 3 , , 1 , m , m 2 , m 3 , , , 1,m,m^2,m^3,\dots,1,m,m^2,m^3,\dots,1,m,m^2,m^3,\dots,\dots,\dots (總共k段)拼出n,然後拼的時候元素要是無序的(即儘管有些數字的值相同,但是標號是不同的,視為不同的數字,然後要滿足標號不減)。

假定現在要求 g m k ( n ) g_m^k(n) (一項)。
顯然數字順序不重要,可以重新寫成 1 , 1 , 1 , , 1 , m , m , m , , m , m 2 , m 2 , m 2 , , m 2 , 1,1,1,\dots,1,m,m,m,\dots,m,m^2,m^2,m^2,\dots,m^2,\dots ,每段有k個。

那麼考慮一個普及組級別的dp,設 F ( i , j ) F(i,j) 表示考慮了前i個數字,和為j的方案數。顯然有(記第 i i 個數字是 a i a_i )列舉當前數字用了幾個: F ( i , j ) = k 0 F ( i 1 , j k a i ) F(i,j)=\sum_{k\geq0}F(i-1,j-ka_i)
然後可以注意到,假設我已經算出了 F ( i 1 ) F(i-1) ,那麼因為我是重新排列過數字的順序了,所以之後加入的數字都是 a i a_i 的倍數,那麼第二維模 a i a_i 的餘數就不會變了。最終只關心n,所以 F ( i , j ) F(i,j) 只關心 j % a i = n % a i j\%a_i=n\%a_i 的那些 j j

也就是說,若 j j 不滿足上述條件可以從現在開始不管了。
那麼既然餘數只關心 n % a i n\%a_i ,相當於是個定值,因此現在只需要表示前面的倍數即可,即重新令:
H ( i , j ) = F ( i , j a i + n % a i ) H(i,j)=F(i,ja_i+n\%a_i)

相關推薦

整數拆分 - dp -

神仙題 題目大意: 定義 f m (

BZOJ4599[JLoi2016&LNoi2016]成績比較(dp+)

calc 需要 names res esp 轉移 等於 sin 必須 這個題我們首先可以dp,f[i][j]表示前i個科目恰好碾壓了j個人的方案數,然後進行轉移。我們先不考慮每個人的分數,先只關心和B的相對大小關系。我們設R[i]為第i科比B分數少的人數,則有f[i][j]

bzoj 4559 [JLoi2016]成績比較 —— DP+

題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 看了看拉格朗日插值:http://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html https://blog.csdn.net/lvzelon

BZOJ4559: [JLoi2016]成績比較(dp )

題意 題目連結 Sol 想不到想不到。。 首先在不考慮每個人的真是成績的情況下,設\(f[i][j]\)表示考慮了前\(i\)個人,有\(j\)個人被碾壓的方案數 轉移方程:\[f[i][j] = \sum_{k = j}^n f[i -1][k] C_{k}^{k - j} C_{N - k}^{

[bzoj4559][DP][]成績比較

Description G系共有n位同學,M門必修課。這N位同學的編號為0到N-1的整數,其中B神的編號為0號。這M門必修課編號為0到M- 1的整數。一位同學在必修課上可以獲得的分數是1到Ui中的一個整數。如果在每門課上A獲得的成績均小於等於B獲 得的成績,則稱A被B碾壓。在

BZOJ2655: calc(dp )

一個 show lin clas 位置 str a.out freopen std 題意 題目鏈接 Sol 首先不難想到一個dp 設\(f[i][j]\)表示選了\(i\)個嚴格遞增的數最大的數為\(j\)的方案數 轉移的時候判斷一下最後一個位置是否是\(j\) \[f[i

[CF995F]Cowmpany Cowmpensation[樹形dp+]

題意 給你一棵樹,你要用不超過 \(D\) 的權值給每個節點賦值,保證一個點的權值不小於其子節點,問有多少種合法的方案。 \(n\leq 3000, D\leq 10^9\) 分析 如果 \(D\) 比較小的話可以考慮狀態 \(f_{i,j}\) 表示點 \(i\) 的權值是 \(j\) 的方案

BZOJ.2655.calc(DP )

BZOJ 洛谷 待補。 //2804kb 160ms #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar() #define Mod(x) x>=mod&

BZOJ-7-2655: calc-DP-

https://www.lydsy.com/JudgeOnline/problem.php?id=2655 以上是對 dp 一小部分打的表。dp[ i ] [ j ]  含義為 前 i 個 數 中 選 j 個 的 價 值 總 和 ,  則轉移 方程為 

[BZOJ2655]calc(DP +

Address 洛谷 P4463 BZOJ 2655 Solution 顯然我們有個 DP f

[LOJ#2473][九省聯考2018]祕密襲擊(樹形DP+生成函式+線段樹合併+

Address 洛谷P4365 BZOJ5250 LOJ#2473 The First Step - 轉化 簡版題意:給定一棵點帶權樹,求樹上所有大小大於 k

【生成函式++整體DP+線段樹合併】LGP4365 [九省聯考2018]祕密襲擊coat

【題目】 原題地址 給定一棵NNN個節點的樹,點權1∼W1 \sim W1∼W,求樹的每一個連通塊的第KKK大點權之和。 【解題思路】 以下均來自這裡 首先可以轉化一下題目。 Ans=∑S∈TkthofS=∑i=1Wi×∑S∈T[kthofS==i]=∑i=1W

法及應用

oci cin app .com dmg npe info sina gin 3man6h1yg巫http://shufang.docin.com/sina_6355780928 7DMg布62夏aq撂儼8秤http://www.docin.com/app/user/use

說明 -1 需要 插值 是什麽 col pre rac div   給定 $n$ 個點 $(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)$ , 其中 $x_1, x_2, ..., x_n$ 互不相等, 構造一個最高次不超過 $n-1$ 的多

4559[JLoi2016]成績比較 容斥+

mem otto spa ack input mes mod 只需要 rip 4559: [JLoi2016]成績比較Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 261 Solved: 165[Submit][Statu

表達 有一個 rec med 做到 pan n+1 IT body 一,介紹   學過FFT的人都應該知道什麽叫做插值,插值的意思就是說將一個多項式從點值表達轉變成系數表達。   在FFT的插值中為什麽可以做到n log n,是因為單位復數根的關系。   那對於普通的

matlab實現函數,多項式

tla zeros 插值 class light 全部 matlab實現 true 利用 %拉格朗日插值多項式 利用矩陣求解 x=1:0.2:3;%已知數據點x坐標向量:x y=sin(x);%已知數據點x坐標向量:y x1=1.1:0.2:3.1;%插值點的x坐標:x

【BZOJ】2655: calc 動態規劃+

size HR spa 數據 下標 轉移 一個 動態規劃 找規律 【題意】一個序列$a_1,...,a_n$合法當且僅當它們都是[1,A]中的數字且互不相同,一個序列的價值定義為數字的乘積,求所有序列的價值和。n<=500,A<=10^9,n+1<A<

Codeforces 622F The Sum of the k-th Powers ( 自然數冪和、法 )

n-1 power HERE sig class text name while pow 題目鏈接 題意 : 就是讓你求個自然數冪和、最高次可達 1e6 、求和上限是 1e9 分析 : 題目給出了最高次 k = 1、2、3 時候的自然數冪和求和公式 可以發現求和公式的

[2016北京集訓測試賽17]crash的遊戲-[組合數+斯特林數+]

想是 memset \n pac ash pri string 。。 多項式 Description Solution 核心思想是把組合數當成一個奇怪的多項式,然後拉格朗日插值。。;哦對了,還要用到第二類斯特林數(就是把若幹個球放到若幹個盒子)的一個公式: $x^{n}=