天天寫演算法之HDU 2604 Queuing

2021-08-17 07:55:29 字數 1082 閱讀 3933

膜拜一波大神**

分析:矩陣快速冪

題意: 

n個人排隊,f表示女,m表示男,包含子串『fmf』和『fff』的序列為o佇列,否則為e佇列,有多少個序列為e佇列

: 矩陣快速冪入門題。

用f(n)表示n個人滿足條件的結果,那麼如果最後乙個人是m的話,那麼前n-1個滿足條件即可,就是f(n-1); 

如果最後乙個是f那麼這個還無法推出結果,那麼往前再考慮一位:那麼後三位可能是:mmf, fmf, mff, fff,其中fff和fmf不滿足題意所以我們不考慮,但是如果是 

mmf的話那麼前n-3可以找滿足條件的即:f(n-3);如果是mff的話,再往前考慮一位的話只有mmff滿足條件即:f(n-4) 

所以f(n)=f(n-1)+f(n-3)+f(n-4),遞推會跪,可用矩陣快速冪 

構造乙個矩陣: 

矩陣快速冪和普通的快速冪原理是一樣的,如果不懂可以先去補補快速冪。

#include #include #include #include using namespace std;  

#include #include #define repf(i,a,b) for(int i=(a);i<=(b);i++)

typedef long long ll;

const int n = 0;

const int size = 4;

int l, mod;

struct mat

void init(ll _v)

};

mat operator * (mat a, mat b)

} }

return c;

}

mat operator ^ (mat a, ll k)

return c;

}

int main() else if (l <= 4) else

} return 0;

}

HDU 2604 矩陣快速冪 較難推的公式

乙個排隊問題,f代表女,m代表男,f和m出現的機率相等。問乙個長為l的隊伍不能出現 fmf 和 fff這樣的串總共有多少種。這個題目的公式遞推略難啊。我看了別人部落格才想明白原來是這麼遞推出來的。首先把前幾項寫出來。l 0 ans 0 l 1,ans 2 l 2,ans 4 l 3,ans 6 l ...

天天寫演算法之Bone Collector

哇,本以為逃出了dp問題,結果轉身又掉了進去。我的腦子哇。這次是0 1揹包問題,感覺和我之前遇到的不太一樣,還沒有切實的編過程式。來看看哇。我一開始的思路是找單位體積價值最大的,進行填充,發現wa了,想了老一會,哦 原來是有可能乙個單位體積價值最大的,導致空間剩餘,使其在空間上變小。如果是可以分割的...

HDU之演算法初步

sort函式在c 的algorithm庫 sort addr1,addr2,cmp 表示從大到小排序,表示從小到大排序 struct s bool cmp s s1,s s2 s ss n sort ss,ss n,cmp include include includeusing namespace...