題意:求在n維空間裡,長度為2m且起點和終點重合的簡單路徑(只能在一維中走)數量
顯然,我們在計算方案時,每次必然加入在同一維度的,方向相反的行動
那麼我們令f[i][j][k]表示目前在處理第i維,已經走了2*j步,其中有2*k步在第i維上
那麼顯然,f[i+1][j][0]+=f[i][j][k] 這等於是停止當前這一維的處理,開始下一維
那麼另一種轉移是這樣滴
f[i][j+1][k+1]+=f[i][j][k]*c(k+1<<1,k+1)/c(k<<1,k)*c(j+1<<1,k+1<<1)/c(j<<1,k<<1)
表示的是,在這一維加入一對相反的行動,那麼,顯然,在這一維裡面,正反都是一樣的
所以對於同一維中,若有2k步,
我們有c(2k,k)排序方案,這點很顯然因為這相當於在長度為2k的空格中插入k個0和k個1,那麼方案自然是c(2k,k),那麼我們先除去上一次的方案再乘上我們新加入的方案
而對於不同維度,互相不影響,所以相當於是把2k個物件放入長度為2j的陣列中,那麼這樣的方案就有c(2j,2k)
所以f[i][j+1][k+1]+=f[i][j][k]*c(k+1<<1,k+1)/c(k<<1,k)*c(j+1<<1,k+1<<1)/c(j<<1,k<<1),
先除去當前狀態的影響再加入新的元素重新計算
而組合數乘除可以用逆元預處理,最後答案為σf[d][n][k] (0<=k<=n)
#pragma gcc opitmize("o3")#pragma g++ opitmize("o3")
#include#include#include#define l long long
#define m 1000000007
using namespace std;
inline l pow(l x,int k)
inline void ad(l& x,l y)
l js[510],inv[510],a=0,f[210][210][210];
inline l c(int n,int m)
inline l gc(int n,int m)
int main()
for(int k=0;k<=n;++k) ad(a,f[d][n][k]);
printf("%lld\n",a);
}
Jzoj3497 隱藏指令
題意 求在n維空間裡,長度為2m且起點和終點重合的簡單路徑 只能在一維中走 數量 顯然,我們在計算方案時,每次必然加入在同一維度的,方向相反的行動 那麼我們令f i j k 表示目前在處理第i維,已經走了2 j步,其中有2 k步在第i維上 那麼顯然,f i 1 j 0 f i j k 這等於是停止當...
iPhone隱藏指令
3001 12345 就可以將訊號點切換為準確的數字顯示 輸入 06 即可顯示出真實的imei,們可以將顯示出來的這個imei和 設定 通用 關於本機 裡面的imei進行對比,以確認該號碼是否被修改過。輸入 21 再撥號 這個指令可以查詢iphone手機所有來電轉移的設定情況,包括語音和簡訊等功能。...
freemarker的list指令中隱藏的變數
freemarker的list指令遍歷乙個list集合中的每乙個元素,例如 list userlists as user 其實list指令還隱含了兩個變數,1 item index 該變數將返回元素在集合裡的索引值,從0開始計數 2 item has next 該變數是boolean型,false表...