1. 程式人生 > >牛客網NOIP賽前集訓營-提高組(第四場) C滅蟲

牛客網NOIP賽前集訓營-提高組(第四場) C滅蟲

題面 考慮DP 先把所有點離散化,設viv_i為離散化後第ii大的點的位置.按pp排序,設fi,jf_{i,j}表示當前DP到第ii個點,最右端覆蓋到jj的最大區間總長度 考慮第ii個區間往左和往右兩種轉移: 往左: 從大到小列舉kk,假設k+1k+1i1i-1的點全部往右噴,mama表示k+1k+1ii的點的rr的最大值,l,p,rl,p,r分別為當前點往左噴覆蓋區間的左端點,噴灑點,向右噴灑的右端點,那麼 fi,ma=max(fk,l+v[ma]v[l]) f_{i,ma}=max(f_{k,l}+v[ma]-v[l])

往右: fi,j=max(fi1,l+v[j]v[l]) f_{i,j}=max(f_{i-1,l}+v[j]-v[l]) Code