昨晚大四的乙個學長給我們講了,距陣的使用,很不錯,這裡總結一下。
一般距陣,用在n很大,導致超時的問題上。它需要快速冪取模的輔助。
例子求斐波那契數列 a1=1; a2=1; an=an-1+an-2; 求 an (n>=1&&n<=108) 由於n很大結果對999999999取模;
對於這題n很大你直接推,每次取%999999999,明顯會超時,
矩陣做法
這樣就可以化為 矩陣(a1 a2)*矩陣(an-1)= 矩陣(an,an+1);
看**#include
#include
#define mod 999999999
__int64 a[5];
__int64 b[3][3];
__int64 quick_mod(__int64 n)
n=n/2;
__int64 k1,k2,k3,k4;
k1=(b[1][1]*b[1][1]%mod+b[1][2]*b[2][1]%mod)%mod;
k2=(b[1][1]*b[2][1]%mod+b[1][2]*b[2][2]%mod)%mod;
k3=(b[2][1]*b[1][1]%mod+b[2][2]*b[2][1]%mod)%mod;
k4=(b[2][1]*b[1][2]%mod+b[2][2]*b[2][2]%mod)%mod;
b[1][1]=k1; b[1][2]=k2; b[2][1]=k3; b[2][2]=k4;
}return a[1];
}int main(void)
return 0;
}這樣就運用快速冪取模大大減少了時間。
如果矩陣大一點的話這樣寫
#include
#include
#define mod 999999999
__int64 a[5];
__int64 b[3][3];
__int64 quick_mod(__int64 n)
}for(i=1;i<=2;i++)
a[i]=s[i];
n--;
}n=n/2;
__int64 kk[5][5];
memset(kk,0,sizeof(kk));
for(i=1;i<=2;i++)}}
for(i=1;i<=2;i++)}}
return a[1];
}int main(void)
return 0;
}
P1939 矩陣加速(距陣快速冪)
思路 這個資料範圍,想要硬算是不可能的。所以我們需要用距陣快速冪去加速這個遞推。我們可以構造乙個距陣 然後我們發現,f i f i 1 1 f i 2 0 f i 3 1 f i 1 f i 1 1 f i 2 1 f i 3 0 f i 2 f i 1 0 f i 2 1 f i 3 0 這樣我們...
方法的運用 強效方法的實際運用
瑪爾西 席莫芙 真正過著這種神奇生活的人,與不是如此生活的人,差別只在 真正過著神奇生活的人已經習慣這種存在的方式,他們已經習慣運用吸引力法則,不論走到哪兒,奇蹟都會發生在他們身上,因為他們記得要使用它。他們一直在使用它,而不是只做一次就算了。這裡有兩個真實的故事,把強有力的吸引力法則及宇宙完美無瑕...
快取的運用
根據人物屬性得到資料列表 幾條資料 型別 條件 是否使用快取 過期時間 分鐘 public datatable getattrtop int top,string attr,string where,bool iscache,int outtime return datatable obj else...