jzoj3848 大水題 數字動態規劃

2021-07-26 03:27:43 字數 945 閱讀 4903

dzy 定義乙個n^2 位的數的生成矩陣a 為乙個大小為n*n 且aij 為這個數的第i*n+j-n位的矩陣。現在dzy 有乙個數n^2 位的數k,他想知道所有小於等於k 的數的n*n 生成矩陣有多少種。(如果不足n^2 位則補字首零)設f[i][0,1][0,1]表示做到第i位,正著看是否和給定數一樣,倒著看是否大於給定數。列舉一位選什麼,轉移一下,即可求出有多少個數倒著也在合法區間內。f[n*n/2]就是回文的數量。

#include

#include

#include

#include

#define lf double

#define ll long long

#define min(a,b) ((a#define max(a,b) ((a>b)?a:b)

#define fo(i,j,k) for(ll i=j;i<=k;i++)

#define fd(i,j,k) for(ll i=j;i>=k;i--)

using namespace std;

ll const maxn=1000,mo=1e9+7;

ll n,m,a[maxn*maxn+10],f[maxn*maxn+10][2][2],g[maxn*maxn+10][2];

ll pow(ll x,ll y)

return z;

}int main()

f[0][1][0]=1;ll mx;

fo(i,0,n-1)fo(j,0,1)

}ll a1=(f[n][0][0]+f[n][1][0])%mo,a2=((f[n/2][0][0]+f[n/2][0][1])%mo+f[n/2][1][0])%mo;

printf("%lld\n",((m-(a1-a2)%mo

*pow(2,mo-2)%mo)%mo+mo)%mo);

return

0;}

TJU 3848 Game(矩陣乘法快速冪)

一看是遞推的關係,明顯是矩陣乘法快速冪了。這裡舉個例子,假設有3個選手,有n場比賽,得分記為si 如果有以下關係 s1 s1 2s3 s2 s2 1s1 1s3 s3 s3 5s2 則可以用以下的矩陣乘法表示 1 1 0 s1 s2 s3 s1 s2 s3 0 1 5 n 2 1 1 寫的難看,如果...

JZOJ 交換 模擬

給出字串s和字串t,現在你要把s的某乙個字元和t的某乙個字元交換,使得交換之後的s至少要有三個連續相同的字元,交換之後的t也要有三個連續相同的字元。問有多少種不同的交換方式。第一行,乙個字串s。s只含有 r g b 三種字元,長度不超過50,不小於3。而且s任意兩個相鄰的字元都不相同。第二行,乙個字...

JZOJ 規律 遊戲

有一堆金塊,king和貓老大輪流抽金塊,每次抽的個數必然是2的次方冪,求勝利 抽走最後一塊 的是誰 三行每行乙個數 n 0對於每局,如果 king 必勝則輸出一行 king will win.否則第一行輸出 maolaoda willwin.第二行輸出他第一次拿的最小數量。8 42maolaoda ...