小D的劇場

2021-10-14 13:37:29 字數 2934 閱讀 7567

小d的劇場

時間限制: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)\times7+7=7c7=(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+710

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=11764349

3−6=117643

備註:3 \leq n \leq 500, 0 \leq q \leq 117649,1 \leq a,b,c \leq 493≤n≤500,0≤q≤117649,1≤a,b,c≤49

/*題意是n個位置可放字元其中的合法數有多少種,每乙個位置可以放49種字元,如果連續三個位置存在不合法的字元,那麼該種組合不合法。

那麼連續的三個字元不合法就好弄了。

首先定義dp[i][j][k],表示第i個位置放j,第i-1個位置放k,那麼想要其合法,第i-2個位置就不能是l,也就是說,如果存在限制vis[j][k][l],那麼它的方案數就不能加上dp[i-1][k][l],否則就可以加上。

所以轉移方程就是

if(!vis[j][k][l])

那麼我們就列舉i個位置和i-1個位置的所有情況

1<=j<=49;

1<=k<=49;

同樣的對與第三個數能不能加上就看有沒有限制。

1<=l<=49;

那麼最後的答案就是dp[n][i][j],對應其所有的組合情況。

初始化dp[2][i][j]=1;表示2個位置就兩種情況,dp[2][1][2]=1;

dp[2][2][1]=1;為了不重複統計。

*/#include

#include

int dp[

500][50

][50]

;//dp[i][j][k]表示第i位選擇j,第i-1位選擇k的方案數

int vis[50]

[50][

50];using

namespace std;

const

int p=

1e9+7;

typedef

long

long ll;

intmain()

for(

int i=

1;i<=

49;i++

)for

(int j=

1;j<=

49;j++

)for

(int i=

3;i<=n;i++

)for

(int j=

1;j<=

49;j++

)for

(int k=

1;k<=

49;k++

)for

(int l=

1;l<=

49;l++)}

int ans=0;

for(

int i=

1;i<=

49;i++

)for

(int j=

1;j<=

49;j++

) cout

}

小D的劇場(思維dp)

時間限制 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的情況數量,在轉移...