noip模擬賽 czy的後宮

2022-05-01 09:45:08 字數 1501 閱讀 3650

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

輸入格式:

輸出格式:

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

輸入樣例#1:

2 2

0110

輸出樣例#1:

7

【樣例說明】

七種方案為(空,空)、(空,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。

分析:求方案數,想到dp,設f[i][j]表示前i個位置,第i個位置放第j類的妹子的方案數,那麼顯然f[i][j] = σf[i-1][k],其實可以把「不放妹子」變成一種妹子,這種妹子不與任何妹子衝突,那麼套用上面的dp方程,就能得到60分.

剩下的40分因為n太大了,導致空間和時間都會吃不消,那該怎麼優化呢?總不能把第一維去掉吧,接下來就比較難想到了,因為題目給我們的是乙個鄰接矩陣,鄰接矩陣+dp能有什麼優化呢?矩陣快速冪!這道題怎麼跟矩陣快速冪扯上聯絡呢?因為我們人為規定了第m+1種妹子:"不放妹子",那麼現在就是每個位置都要放上乙個妹子了,如果我們把每個妹子抽象成一條邊,邊權為1,那麼就是求長度為n的路徑數,這就是經典的矩陣快速冪的應用,套用模板就可以了.

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int mod = 1e9 + 7

;int

n, m;

long

long a[110][110],ans[110][110],t[110][110

];long

long

anss;

void

mul1()

memcpy(ans, t,

sizeof

(ans));

}void

mul2()

memcpy(a, t,

sizeof

(a));

}void qpow(intb)}

intmain()

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

qpow(n);

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

anss = (anss + ans[0][i]) %mod;

printf(

"%lld\n

", anss);

return0;

}

NOIP模擬賽 czy的後宮

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

2015 10 31的NOIP模擬賽

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

noip模擬賽 密碼

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