結果: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 的複雜度. 核心**: 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**: 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; } b 簽到題 include include include using namespace std intmain return0 e colour sequence 題意 給出乙個字串,每個字元代表一種顏色,輸出滿足所有顏色出現次數均為偶數次的連續子串的個數 思路 位運算 分析 0 ci 20,用... 題目大意 給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... eeat walnuts 每次只能選乙個數字 下標為 j,i為它前乙個數字下標,k為下乙個數字的下標 而且這個數字不能是開頭或者結尾數字,把它消耗掉的代價是 a i a j a k 2,問最後剩兩個數字的時候的最小總花費是多少。區間dp,其實挺簡單,當時憨批了,其實一直是。pragma gcc op...ll ask_l (
#include
2020(ICPC)江西省程式設計競賽正式賽
2020ICPC江西省賽 C 列舉,二分
2020ICPC模擬賽E(區間dp)