模擬賽 路徑計數 題解

2021-09-27 09:08:03 字數 695 閱讀 6287

題意:有k個障礙,求(0,0)到(n,m)不經過這些障礙的方案數。

直接dp會超時。可以發現,(0,0)到(n,m)不經過障礙的路徑條數 為總路徑條數-經過障礙的路徑條數,即c(n+m,n)-經過障礙的路徑條數。

設dp(i)表示從(0,0)到第i個障礙,不經過其它障礙的路徑條數。

轉移時計算經過障礙的路徑條數,列舉j,表示第乙個經過的障礙是第j個障礙,這樣從第j個障礙到第i個障礙就可以走任意路徑了(已經經過障礙了)。

但是為了避免重複,從(0,0)到第j個障礙時不准經過其它障礙,即dp(j),這樣就求出了從(0,0)到第i個障礙且經過乙個其它障礙的路徑條數。

再用總路徑條數減去這個值,即為dp(i)這樣就求出了答案。時間複雜度\(o(k^2)\)

**:

#include #define ll long long

int md=1000000007;

ll ny[200010],jn[200010],jc[200010];

int x[3010],y[3010],k=0;

int c(int n,int m)

int dp[3010];

bool js[3010];

void ycl()

}void dfs(int u)

{ js[u]=true;

dp[u]=0;

for(int i=0;i

模擬賽 circle 題解

題意 有n個數,問有多少個x,x leq t 滿足這n個數分別 x後,異或和為s。每個數小於 2 m 數字dp。由於是加法,需要記錄進製,因此從低位到高位dp。只要記錄下有幾個進製,就可以根據這n的數的大小知道究竟是哪幾個進製了。設 dp i,j,0 1 表示考慮到第i位,有j個進製,與t的大小關係...

模擬賽2 題解

這次模擬賽最後一道是提答題,就不寫題解了。orz這題 emmm,我無話可說。小範圍記憶化,大範圍遞迴求解 複雜度 o k sqrt 記 f i,j 表示前 j 個數中不被 a i,a dots,a n 整除的個數,答案即為 f 1,n 狀態轉移方程為 f i,j f i 1,j f i 1,j a ...

2020 10 08 模擬賽 題解

期望100 實際100 老師說是結論題。其實可以直接打表,t i 表示0 63中有t i 對數與起來等於i,然後乘法原理即可。沒什麼難度。include include using namespace std const int maxn 100005 const int mod 1e9 7 cha...