2020ICPC江西省賽個人總結補題

2021-10-10 17:44:31 字數 2849 閱讀 3492

結果:solo8題,一發過。還有三道題有思路,但是沒寫出來.

b,e,i,k,m題水.

g.mathematical practice

題目大意:

讓你將n個元素劃分成m個有順序的互不相交的子集(可以為空)。問方案數。

思路:1.看樣例猜結論

2.令dp(

i,j)

dp(i,j)

dp(i,j

)代表i個元素劃分成j個不相交子集的方案數。

不難發現遞推式:dp(

i,j)

=∑k=

0ici

k∗dp

(i−k

,j−1

)dp(i,j) = \sum_^c_^*dp(i-k,j-1)

dp(i,j

)=∑k

=0i​

cik​

∗dp(

i−k,

j−1)

之後打表找規律得到答案 = (m+

1)

n(m+1)^

(m+1)n

h.sequence

題目大意:

帶單點修改,給出乙個序列,問序列中有多少個字段最小值 = a

xa_x

ax​.保證無重複元素.

思路:線段樹維護最小值,然後往兩邊二分得到邊界,乘一下即可。

複雜度:o(n

logn

logn

)o(nlognlogn)

o(nlog

nlog

n)優化:

本質上就是求整個序列內小於a

xa_x

ax​的離a

xa_x

ax​最近的值的位置。說實話這對我來說算乙個比較新的trick了。之前在主席樹的時候用過這個trick。沒能靈活運用。

具體做法:只考慮求a

xa_x

ax​左邊的值,右邊類似

1.因為要盡量離a

xa_x

ax​近,那麼貪心的檢查右子樹中是否含x

xx。有 並且 區間最小值

< a_x

​的話.那麼右邊可能存在答案(1.2為什麼說可能,因為可能存在唯一乙個val

val < a_x

val​,其位置》

x> x

>

x.這樣答案就不存在,但是我們還是會往右子樹走.)

2.如果右子樹不符合要求,自然就往左子樹看。若左子樹最小值

< a_x

​.那就往左子樹搜尋(這個時候答案是一定存在的).

邊界條件:

1.l ==

rl==r

l==r

,返回lll

2.m in

[t]≥

ax

min[t]\geq a_x

min[t]

≥ax​

返回0.代表非法狀態。這種情況對應的是1.2

複雜度:o(n

logn

)o(nlogn)

o(nlog

n)簡要證明:

根據:只要往左走,那麼答案就一定存在。考慮其生成樹的樣子。要麼是一直往右走。要麼只能往左拐一下就直接找到答案。那麼單次查詢最差也就兩條鏈。即2∗l

og

n2*logn

2∗logn

的複雜度.

核心**:

ll ask_l (

int l ,

int r ,

int t ,

int id , ll val)

l.wzb』s harem

題目大意:

有障礙限制的n皇后,求方案數.

n ≤20

n\leq 20

n≤20

題目思路:

一眼狀壓:考慮轉移的時候,注意dp狀態設定為字首i行的 或狀態.

進一步優化:可以先按[二進位制中1的個數]來歸桶狀態,然後轉移的時候只會從i

ii個』1』 轉移到i+1

i+1i+

1個』1』的狀態。

ac**:

#include

using

namespace std;

#define ll long long

const

int mod =

1e9+7;

int dp[21]

[1<<20]

, f[

1<<20]

;int a[21]

, lim[21]

;vector<

int> states[21]

;int

main()

}int s =

1<< n;

states[0]

.push_back(0

);for(

int i =

1; i < s ; i++

) dp[0]

[0]=

1;for(

int t =

0; t < n ; t++)}

} ll res =1;

for(

int i =

1; i <= n ; i++

) res = res * i % mod;

res = res * dp[n]

[s -1]

% mod;

cout << res << endl;

return0;

}

2020(ICPC)江西省程式設計競賽正式賽

b 簽到題 include include include using namespace std intmain return0 e colour sequence 題意 給出乙個字串,每個字元代表一種顏色,輸出滿足所有顏色出現次數均為偶數次的連續子串的個數 思路 位運算 分析 0 ci 20,用...

2020ICPC江西省賽 C 列舉,二分

題目大意 給n nn個線段.假設選擇k kk個線段,它們的交集長度為s ss.要求最大化min k,s min k,s min k,s n,l i,ri 3e5 n l i,r i leq 3e5 n,li ri 3e5 題目思路 首先想的是三分選擇的k kk個線段。求最大的交集。因為s ss隨著k...

2020ICPC模擬賽E(區間dp)

eeat walnuts 每次只能選乙個數字 下標為 j,i為它前乙個數字下標,k為下乙個數字的下標 而且這個數字不能是開頭或者結尾數字,把它消耗掉的代價是 a i a j a k 2,問最後剩兩個數字的時候的最小總花費是多少。區間dp,其實挺簡單,當時憨批了,其實一直是。pragma gcc op...