WC模擬(1 12) T3 小C的線段樹

2021-08-19 17:56:09 字數 1834 閱讀 8584

小c的線段樹

題目背景:

1.12 wc

模擬t3

分析:dp

據說,這個玩意兒才是本場

t1······,考場上只想到乙個

nm2的暴力,就是,直接定義

f[i][l][r]

表示當前是第

i個區間,上乙個括號是

[l, r)

,這樣過掉了

k = 1

的部分。

考慮標算,注意到當

n > m

時,是不存在合法操作序列的,所以因為

nm <= 100000

,那麼n < 320

,我們可以把區間

[l, r)

,看成一對括號,左括號在

l,右括號在

r,那麼對於乙個位置

i,它最終的值就是它左邊的左括號數量減去右括號數量的,所以我們設

dp[i][l][r]

表示,當前位置是

i,左邊有

l個左括號,左邊有

r個右括號的方案數,

f[i][l][r]

表示,當前位置是

i,左邊有

l個左括號,左邊有

r個右括號的貢獻和,每一次

f[i][l][r] += dp[i][l][r] * (l - r)k

,轉移f,dp

轉移只需要直接列舉在

i + 1

的位置上放置左括號,右括號,左括號和右括號,或者不放置就可以了。具體轉移存在一些特判,具體見**。

source:

/*

created by scarlyw

*/#include #include #include #include #include #include #include #include #include #include #include #include inline char read()

return *s++;}/*

templateinline void r(t &x)

for (x = 0; isdigit(c); c = read())

x = ((x << 2) + x << 1) + (c ^ '0');

if (iosig) x = -x;

}//*/

const int out_len = 1024 * 1024;

char obuf[out_len], *oh = obuf;

inline void write_char(char c)

templateinline void w(t x)

}inline void flush()

///*

templateinline void r(t &x)

//*/

const int maxn = 350 + 10;

const int mod = 998244353;

int ans, n, m, k;

int f[2][maxn][maxn], dp[2][maxn][maxn], num[maxn];

inline int mod_pow(int a, int b)

inline void add(int &x, int t)

inline void solve()

if (r)

if (l && r)

add(f[x][l][r], (long long)dp[x][l][r] * num[l - r] % mod);

}} std::cout << f[m & 1][n][n];

}int main()

WC模擬(1 8) T3 送你一朵聖誕樹

送你一朵聖誕樹 題目背景 1.8 wc 模擬t3 分析 並查集 堆 貪心 對於全域性最小的那個點,選擇了它的父親之後,就一定會選擇它,所以我們直接合併它和它的父親,那麼對於乙個點集 i,記錄 ti為點集中的點的個數,si為點集中的點的權值和,那麼,對於兩個點集,如果點集 i優於點集 j,那麼 ti ...

YCH的模擬賽 T3

暴搜或者字典樹,但是因為輸出所有的方案而不是方案數,不管什麼做法都逃不過輸出,所以都差不多 sol1 記憶化搜尋 當列舉方案時,f i 表示已經把字串的前i個字母都拼好的情況下有多少方案 考慮從第i 1個字元開始到j是乙個給定的單詞 如果有這樣的j的話就可以轉移 然後開乙個vector把每乙個狀態下...

常州模擬賽d2t3 小X的佛光

平日裡最喜歡做的事就是蒸發學水。題目描述 小 x 所在的城市 x 城是乙個含有 n 個節點的無向圖,同時,由於 x 國是一 個發展中國家,為了節約城市建設的經費,x 國首相在建造 x 城時只建造 n 1 條邊,使得城市的各個地點能夠相互到達。小 x 計畫蒸發 q 天的學水,每一天會有一名學水從 a ...