BM線性遞推

2021-09-25 13:16:52 字數 2009 閱讀 5430

如果乙個數列、其能夠通過線性遞推而來:

例如使用矩陣快速冪優化的 dp 大概都可以丟進去

則使用 bm 即可得到任意 n 項的數列元素

模板:

#include #include #include #include #include #include #include #include #include #includeusing namespace std;

#define rep(i,a,n) for (int i=a;i=a;i--)

#define pb push_back

#define mp make_pair

#define all(x) (x).begin(),(x).end()

#define fi first

#define se second

#define sz(x) ((int)(x).size())

typedef vectorvi;

typedef long long ll;

typedef pairpii;

const ll mod=1000000007;

ll powmod(ll a,ll b) return res;}

// head

ll n;

namespace linear_seq

int solve(ll n,vi a,vi b)

}rep(i,0,k) ans=(ans+res[i]*b[i])%mod;

if (ans<0) ans+=mod;

return ans;

}vi bm(vi s)

}

題意:乙個人從0點開始,每次可以往前或者往後走1到k步,每次的概率都為1/k,問:走到n的位置的概率是多少?

題解:我們直接暴力求出前2*k項,然後丟進bm,求的結果。

設:dp[i]表示到達i點的概率,那麼轉移方程為:

可以看出這是乙個遞推式。

#include #include #include #include #include #include #include #include #include #includeusing namespace std;

#define rep(i,a,n) for (int i=a;i=a;i--)

#define pb push_back

#define mp make_pair

#define all(x) (x).begin(),(x).end()

#define fi first

#define se second

#define sz(x) ((int)(x).size())

typedef long long ll;

typedef vectorvi;

typedef pairpii;

const ll mod=1000000007;

ll powmod(ll a,ll b) return res;}

// head

ll n;

namespace linear_seq

int solve(ll n,vi a,vi b)

}rep(i,0,k) ans=(ans+res[i]*b[i])%mod;

if (ans<0) ans+=mod;

return ans;

}vi bm(vi s)

dp[i]=(dp[i]*invk)%mod;

v.push_back(dp[i]);

}ll ans;

if(n==-1)

else

printf("%lld\n",ans);

// scanf("%lld", &n);

// printf("%lld\n",1ll * linear_seq::gao(v,n-1) % mod);}}

杜教板子(BM)線性遞推式

據說這個模板可以解決任何線性遞推式,聽說是杜教的,只要我們手推遞推式的前幾項,然後扔進這個板子就哦了,我的天,前幾項丟的越多越好,8個以上就穩了 打臉了,有的題還是要多要一點 剛剛遇到乙個導8個沒用,導了50個就ok了。includeusing namespace std define rep i,...

杜教BM線性遞推自動化模板

這是乙個超厲害的模板,功能是輸入前幾項,能夠自動推導公式 前提 公式必須是線性的,前幾項越多越好,一般不低於8項,不然推出來不準確。原理 暫時沒搞清楚,聽說是利用矩陣來推導。include include include include include include include include...

Re 線性遞推

嗯 我之前的不知道多少天看這個的時候到底在幹什麼呢 為什麼那麼。可能大佬們太強的緣故 最後仔細想想思路那麼的emmm 不說了 要落淚了 唔唔唔多項式求逆 多項式除法 取模 求乙個滿足k階齊次線性遞推數列ai 的第n項 即 給出f1 fk,a0 ak 1求an n 1e9,k 32000 emmm矩陣...