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