題目意思:有n只貓,有三種操作得花生,吃花生,換花生。k種操作,進行m輪
解題思路:m很大,考慮矩陣變化,考慮每乙個變化過程,由於有加一,將初始矩陣末尾增加一,方便進行操作,然後有如下網上借鑑(chaoxi)來的變換。
要注意的是:題意很簡單但是因為理解錯題意,以為重複m次是每進行一次操作就重複,但是正確的理解是全部操作整體進行m次重複,由於m的資料較大,所以用矩陣快速冪,用矩陣快速冪的時候必須進行優化(因為是稀疏矩陣矩陣),否則會超時。
1mat乘法優化:for(i=1;i<=n;++i)
2for(j=1;j<=m;++j)
3for(l=1;l<=k;++l)
4 c[i][l]+=a[i][j]*b[j][l];
glacier-elk的部落格:
還有一件事:在做矩陣乘法的時候,最好是按照我上面**的迴圈順序計算,因為如果你改變了迴圈順序,速度就會變慢,如果你不相信的話可以去試一試,這是因為按照我**的順序,在計算一部分值之前,他的原值已經存在快取中了,這樣的話是比從記憶體中讀取快的,而改變順序的話,就會從記憶體中呼叫,就會變慢了。如果還不理解:可以這樣考慮,這份**將j迴圈移動到了中間,最內層變成了l迴圈,這個**的意義在於:在最內層迴圈,對於c和b的訪問都是順序的了,而這個迴圈中a[i][k]不變,這樣就更好的利用了cpu cache。矩陣越大,這個加速效果越明顯。
poj 3735 矩陣行列變換
這題是矩陣運算的經典題目。可以將peanut初始化為,然後對peanut矩陣進行變換 行變換,可以對單位矩陣操作,然後放在左邊乘以peanut。列變換則放在右邊 還有矩陣的運算符合結合率,不符合交換率。進行矩陣的n次方運算的時候,我一直沒用二進位制的思想,一直在模擬遞迴的過程,結果不斷超時,感覺複雜...
poj 3735 (矩陣快速冪)
題意 有n只貓咪,開始時每只貓咪有花生0顆,現有一組操作,由下面三個中的k個操作組成 1.g i 給i只貓咪一顆花生公尺 2.e i 讓第i只貓咪吃掉它擁有的所有花生公尺 3.s i j 將貓咪i與貓咪j的擁有的花生公尺交換 現將上述一組操作做m次後,問每只貓咪有多少顆花生?解題報告 view co...
構造矩陣 矩陣快速冪 POJ3735
這題題意如下,有n 只貓咪,三種關於花生的命令 得花生,吃花生,交換花生 給出一套命令,重複 n 次,問最後每只貓咪得到多少花生。m那麼大,毫無疑問,矩陣快速冪。先構造乙個單位矩陣,因為只需在單位矩陣上進行操作,然後用操作完之後得到的矩陣乘以初始的狀態就得到最終的狀態。看下圖 第 i 只貓咪得花生就...