a - recursive sequence hdu - 5950
遞推式:f(n) = f(n - 1) + 2 * f(n - 2) + n ^ 4
思路:這個遞推式是非線性的,但我們可以把 n ^ 4 寫成 ((n - 1) + 1) ^ 4,
n ^ 4 = c40
c_^c4
0* (n - 1) + c41
c_^c4
1* (n - 1) + c42
c_^c4
2* (n - 1) + c43
c_^c4
3* (n - 1) + c44
c_^c4
4* (n - 1);
n ^ 3 , n ^ 2, n, 同理。
所以我們要構造乙個7 x 7的矩陣, 記錄的是記g(n - 1) =
所以我們可以通過這樣乙個矩陣來獲得g(n)
mat a =
;
這是ac**
#include
using
namespace std;
typedef
long
long ll;
const ll maxn =7;
typedef
long
long ll;
ll mod =
2147493647
;struct mat
unit;
mat mul
(mat &a, mat &b)
ret.m[i]
[j]= x;}}
return ret;
}void
init_unit()
return;}
mat pow_mat
(mat a, ll n)
a =mul(a, a)
; n >>=1;
}return ret;
}mat a =
;mat b =
;int
main()
else
if(n ==2)
mat ret =
pow_mat
(a, n -2)
; ret =
mul(ret, b)
;printf
("%i64d\n"
, ret.m[0]
[0])
;}return0;
} 片
#include
using
namespace std;
typedef
long
long ll;
const ll maxn =3;
typedef
long
long ll;
ll mod =
1e9+7;
struct mat
unit;
mat mul
(mat &a, mat &b)
ret.m[i]
[j]= x;}}
return ret;
}void
init_unit()
return;}
mat pow_mat
(mat a, ll n)
a =mul(a, a)
; n >>=1;
}return ret;
}mat a =
;mat b =
;int
main()
if(n ==3)
if(n ==4)
mat ret =
pow_mat
(a, n -4)
; ret =
mul(ret, b)
;printf
("%i64d\n"
, ret.m[0]
[0])
;}return0;
}
c - fibonacci poj - 3070
思路:就是求乙個斐波那契。。。
#include
#include
using
namespace std;
typedef
long
long ll;
const ll maxn =2;
typedef
long
long ll;
ll mod =
10000
;struct mat
unit;
mat mul
(mat &a, mat &b)
ret.m[i]
[j]= x;}}
return ret;
}void
init_unit()
return;}
mat pow_mat
(mat a, ll n)
a =mul(a, a)
; n >>=1;
}return ret;
}mat a =
;int
main()
if(n ==0)
if(n ==
1|| n ==2)
mat ret =
pow_mat
(a, n -1)
;printf
("%i64d\n"
, ret.m[0]
[0])
;}return0;
}
d - training little cats poj - 3735
看大佬部落格
#include
#include
using
namespace std;
typedef
long
long ll;
const ll maxn =
200;
//ll mod = 10000;
struct mat
unit;
ll n;
mat mul
(mat &a, mat &b)
;for
(int i =
0; i <= n; i++
)for
(int k =
0; k <= n; k++)}
}return ret;
}void
init_unit()
return;}
mat pow_mat
(mat a, ll m)
a =mul(a, a)
; m >>=1;
}return ret;
}mat a;
intmain()
a = unit;
mat b =
; b.m[n][0
]=1;
while
(k--
)else
if(ch ==
'e')
}else}}
mat ret =
pow_mat
(a, m)
; ret =
mul(ret, b)
;for
(int i =
0; i < n; i++)}
printf
("\n");
}return0;
}
2017暑假訓練國慶小假期總結
這個假期主要看完了所有網路流的知識點,看了一點簡單的建模例子,複習了一下逆元包括快速冪求大數的n次方,然後補了補樹狀陣列和線段樹的題。對於網路流最後乙個知識點,就是有上下界的網路流,所謂上界,就還是以前的邊權的最大值,不過難度增加在加了乙個邊權值的最小值。也就是流過某個邊的流量不能低於最小值,也不能...
2017暑假訓練第九天
上午剛剛看完了樹狀陣列的知識點,就自己的理解先做一下總結,整理一下學到了什麼。樹狀陣列 1.樹狀陣列的作用 使用背景 當要同時存在下述兩種運算元次的時候 1 對第x位置處的資料進行除了刪除,乘除,之外的修改 比如增加或減去乙個數 2 求某一位置的字首和。處理以上兩種情況的時候,使用簡單的陣列就不在適...
2017暑假訓練第十二天
今天的訓練主要完成了有關單調佇列的兩個題,乙個是有關於最大的全1矩陣,這個題我一開始的思路是借用了以前所學過的乙個有關求最大子矩陣和的dp題目的思路,將二維的矩陣壓縮成一維,然後求一維的最大子段和,依照這個思路,我的想法仍然是這樣合成,最後逐次對行建立單調佇列,依據單調佇列的性質求出最大的矩陣所包含...