時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 131072k,其他語言262144k
64bit io format: %lld
若你摘得小的星星 你將得到小的幸福
若你摘得大的星星 你將得到大的財富
若兩者都能摘得 你將得到永遠的願望
摘星是罪孽的寬恕 摘星是夜晚的奇蹟
抓住它吧 你所期望的那顆星
無法觸及,因而耀眼
明明觸及了,卻還是耀眼
——《少女☆歌劇 revue·starlight》
題目描述
"我明白。"
作為這命運劇場永遠的觀眾,小d一直注視著這片星光璀璨的舞台,舞台上,少女們的身姿演繹出了一幕幕動人的場景,令人回味無窮。
有的時候,小d也會自己寫一些歌曲,來加入starlight的劇本,使得劇本充滿了新的生命力。
現在小d又要準備寫樂譜了,小d寫譜的方式比較獨特。他會先寫出乙個按照音符出現順序排成的序列,再進一步整合,每次整合會選取相鄰的三個作為三和弦。整合次數無限。
小d選取的音符形如d5 f6這種形式,例如d5表示d大調sol(這裡不考慮公升降音)為了方便生成樂譜,他將這些音符進一步轉化了,小d給c d e f g a b重新編號成了1 2 3 4 5 6 7,之後新的音符編號生成方式應為(字母對應的標號-1)*7+數字,例如c7=(1−1)×7+7=7
但小d討厭一些他所認為的不優美的和弦,因此他並不希望自己的譜子裡面有可能出現這樣的三和弦,也就說音符組成的序列裡不應該存在他所討厭的子段,假如c5 f1 a2這三個音符湊成的和弦小d不喜歡,那麼序列裡面就不能出現c5 f1 a2,c5 a2 f1,a2 c5 f1,a2 f1 c5,f1 a2 c5,f1 c5 a2這六種子段。
現在小d正在推算有多少合法的序列,答案對 10^9+7 取模。
星屑飄灑的舞台上,可人綻放的愛之花,請努力讓大家星光閃耀吧!
第一行為兩個整數 n, q ,表示序列的長度和有多少和弦小d不喜歡.接下來 q 行,每行三個整數 a, b, c ,表示小d不想出現的和弦
一行乙個整數,表示答案示例1
複製
10 10複製18 3 3
43 28 22
42 28 3
48 48 4
29 9 31
47 9 22
1 22 49
15 48 29
2 8 27
4 24 34
382785822示例2
複製
3 1複製1 2 3
117643一共有6種不合法的序列:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
答案為49^3−6=117643
3≤n≤500,0≤q≤117649,1≤a,b,c≤49題意:求乙個序列中不含有不合法子序列的個數。
題解:排列組合,用dp解決,dp[i][r][j]的意思是:i為序列長度,r為序列倒數第二位,j為序列倒數第一位,a=1代表不合法,a=0代表合法,然後我們就可以推出遞推式 dp[i][r][j]=dp[i][r][j]+(a[j[k][r]^1)*dp[i-1][k][r];異或是因為0表示合法,1表示不合法~~這樣就可以寫**了,上**(**裡還有細節解釋):
#include #include using namespace std;
const int max = 666;
const int mod = 1e9+7;
int dp[max][66][66];
int a[max][66][66];
int main()
for (int i = 1; i <= n;i++)
}} }
int ans=0;
for (int i = 1; i <= 49;i++)
} cout << ans << endl;
return 0;
}
小D的劇場
小d的劇場 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 若你摘得小的星星 你將得到小的幸福 若你摘得大的星星 你將得到大的財富 若兩者都能摘得 你將得到永遠的願望 摘星是罪孽的寬恕 摘星是夜晚的奇蹟...
牛客 369A 小D的劇場(線性dp)
題幹 題目描述 我明白。作為這命運劇場永遠的觀眾,小d一直注視著這片星光璀璨的舞台,舞台上,少女們的身姿演繹出了一幕幕動人的場景,令人回味無窮。有的時候,小d也會自己寫一些歌曲,來加入starlight的劇本,使得劇本充滿了新的生命力。現在小d又要準備寫樂譜了,小d寫譜的方式比較獨特。他會先寫出乙個...
A 小D的劇場 牛客練習賽40 dp
題目的意思就是長度為n的序列,每個位置可以選擇1 49的數字,但是連續的3個不能出現他不喜歡的三和弦所有排列,問有多少種滿足條件的序列。由於n很小使用dp求解,記錄當前位置和上一位使用了哪些數字,複雜度o 49 3 n 令d i j k 表示長度為i的序列最後一位為k倒數第二位為j的情況數量,在轉移...