NOIP模擬賽 czy的後宮

2022-05-16 06:08:51 字數 1747 閱讀 8356

【題目描述】

czy要妥善安排他的後宮,他想在機房擺一群妹子,一共有n個位置排成一排,每個位置可以擺妹子也可以不擺妹子。有些型別妹子如果擺在相鄰的位置(隔著乙個空的位置不算相鄰),就不好看了。假定每種妹子數量無限,求擺妹子的方案數。

【輸入格式】

【輸出格式】

輸出只有乙個整數,為方案數(這個數字可能很大,請輸出方案數除以1000000007的餘數。

【樣例輸入】

2 2【樣例輸出】

【樣例說明】

七種方案為(空,空)、(空,1)、(1、空)、(2、空)、(空、2)、(1,1)、(2,2)。

【資料範圍】

20%的資料,1<n≤5,0<m≤10。

60%的資料,1<n≤200,0<m≤100。

100%的資料,1<n≤1000000000,0<m≤100。

但寫的太醜可能t一倆個點

前輩都忙著開後宮了,就我這個苦逼在弱校掙扎。。。

f[i][j]= i表示由i個妹子組成,j代表以j結尾

用異或狀態壓縮

60分:

1 #include2

using

namespace

std;34

const

int mod=1000000007;5

6int n,m,ans,p=0;7

int f[2][101];8

bool d[101][101];9

char s[255

];10

11int

main()

1220

for(int i=0;i<=m;i++) f[0][i]=1;21

for(int i=2;i<=n;i++)

2231}32

for(int i=0;i<=m;i++)

33 ans=(ans+f[p][i])%mod;

34 cout35return0;

36 }

100分要用矩陣乘法配合圖論來做

f[i][k]表示從i到k的路徑條數,即以第i盆花開始,第k盆花結束的擺法有多少種

那麼f[i][k]=σ(f[i][j]*f[j][k])

即f=f*gn

配合快速冪

最後ans=σ(f[i][0])

1

#define ll long long

23 #include4 #include5

using

namespace

std;67

const

int maxn=105;8

const

int mod=1000000007;9

10struct

mat11

f,g;

14ll n,m,ans;

15char ch[255

];16

17mat mult(mat a,mat b)

1828

29void modexp(int

b)3037}

3839

intmain()

4048

for(int i=0;i<=m;i++)

4953

modexp(n);

54for(int i=0;i<=m;i++)

55 ans=(ans+f.mat[i][0])%mod;

56 cout57return0;

58 }

noip模擬賽 czy的後宮

czy要妥善安排他的後宮,他想在機房擺一群妹子,一共有n個位置排成一排,每個位置可以擺妹子也可以不擺妹子。有些型別妹子如果擺在相鄰的位置 隔著乙個空的位置不算相鄰 就不好看了。假定每種妹子數量無限,求擺妹子的方案數。輸入格式 輸出格式 輸出只有乙個整數,為方案數 這個數字可能很大,請輸出方案數除以1...

2015 10 31的NOIP模擬賽

這是noip前的最後一周了。第一題是個組合數學的問題,規模不算太大。但第一反應就直接dp了,o n 2 的複雜度,始終想不到優化。本來看著1 3 4 6 10 15一串串數覺得多熟悉的,就是想不起來那是組合數。最後只有80分 第二題算是基本想到了吧,但是忽略了乙個問題 我的想法是每行0的個數要麼是當...

noip模擬賽 密碼

表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...