膜拜一波大神**
分析:矩陣快速冪
題意:
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...