牛客OI周赛15-普及组
1. 咪咪游戲
bool f1,f2,f;
f1用于記錄m
f2用于記錄q
f用于判斷串的好壞。1為壞,0為好
注意幾種情況:
mqm
mmq
具體看代碼:
2. 三角形
dp問(wèn)題
我們可以用dp來(lái)把所有的情況都算出來(lái),最后取他要求的前m大就行
dp[i][j]表示前i個(gè)寶箱,裝的寶物價(jià)值為j的方案數(shù)量,dp=0則說(shuō)明沒(méi)有這種情況
轉(zhuǎn)移方程:
dp [ i ] [ k ] + = dp [ i - 1 ] [ k - a [ i ] [ j ] ] ;
最后把dp [ n ] [ j ] ( j = 1 ~ tot)加起來(lái),不要忘了還有限制條件前k個(gè)
tot是寶物的最大價(jià)值(即每組最貴的寶物之和)
3. 區(qū)間加
題解:
序列區(qū)間的問(wèn)題可以考慮差分
先注意題目要求:每個(gè)區(qū)間的頭與尾都是不相同的,也就是說(shuō)每個(gè)位置不能同時(shí)放多個(gè)左括號(hào)或右括號(hào),但允許同時(shí)放 ( 和 )
首先我們用a1[]來(lái)存a距離目標(biāo)m差多少
a1 [ ] = m - a [ ]
然后用b來(lái)存a1的差分
b [ i ] = a [ i ] - a [ i - 1 ]
根據(jù)b的值分成四種情況:
1.當(dāng)b<-1||b>1,此時(shí)i-1與i兩個(gè)位置的數(shù),差值大于等于2。比如b=2,意味著i位置的數(shù)要比i-1位置的數(shù)多操作兩次,那就說(shuō)明i-1與i之間要有兩個(gè)左括號(hào)才可以,這樣區(qū)間包括i但是不包括i-1,但題目要求一個(gè)位置不存在多個(gè)左括號(hào),所以遇到這種情況,就說(shuō)明此數(shù)據(jù)根本無(wú)法滿足題目要求,輸出0即可
2.如果b=1,說(shuō)明i要比i-1多操作一次,那就是i-1與i之間有一個(gè)左括號(hào),i-1 ( i,這樣i就在一個(gè)區(qū)間里而i-1不在,i就比i-1多操作一次。
光有左括號(hào)不行還要有右括號(hào),我們可以先把右括號(hào)的位置待定,因?yàn)楹竺娴臄?shù)據(jù)還沒(méi)處理到,你不知道右括號(hào)要放哪,用w來(lái)表示還沒(méi)配對(duì)的左括號(hào)的數(shù)量。b=1時(shí),w++
3.b=-1時(shí),就是上一種情況反過(guò)來(lái),i-1與i之間有一個(gè)右括號(hào),此時(shí)用到右括號(hào),就去看之前有多少左括號(hào),好去配對(duì)
sum用于記錄總值,初始為1
sum+=sumw
有w個(gè)左括號(hào),說(shuō)明此處可以形成w個(gè)區(qū)間,之前已經(jīng)有sum個(gè)區(qū)間了,總區(qū)間數(shù)就是sumw
4.b=0,說(shuō)明i-1與i相等,那他們倆就在同一個(gè)區(qū)間里。我們可以選擇不操作,如果在i之前有左括號(hào),i之后可以放右括號(hào)
sum=sum*w+sum
4. 多元組
題解:
求長(zhǎng)度為k的遞增子序列的數(shù)量:
想了一陣子,最后還是看了看其他題解
誒呀,要上網(wǎng)課了,等有空再更新最后一個(gè)題
總結(jié)
以上是生活随笔為你收集整理的牛客OI周赛15-普及组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有效的减肥茶 五种超见效的减肥茶推荐给你
- 下一篇: 恢复数列