C. Line Empire_思維dp
阿新 • • 發佈:2022-04-19
C. Line Empire
題目大意:
在一個數軸上,首都一開始在0位置,給出n在不同位置的城市。可以採取兩種行動:
1)佔領城市。前提是這兩個城市之間沒有未佔領的城市,花費a*|di-dj|。
2)移動首都。將首都移動到任意已經佔領的城市,花費b*| di-dj|。
問佔領所有城市的最小花費。
思路和程式碼:
一拿到就覺得是dp啊,但是一看屬於2e5,怎麼D哇...想著先D著,D出來再優化。還是D不出來...
看一看題解發覺只要列舉首都所在的最後位置即可。
void solve(){ ll n , a , b ; cin >> n >> a >> b ; vct<ll> x(n + 1 , 0) ; vct<ll> p(n + 1 , 0) ; rep(i , 1 , n) cin >> x[i] ; rep(i , 1 , n) p[i] = x[i] + p[i - 1] ; ll ans = b * p[n] ;//首都在0沒動 rep(i , 1 , n){//列舉最終首都位置 ll res = 0 ; res += (p[n] - p[i] - x[i] * (n - i)) * b ; res += x[i] * (a + b) ; ans = min(ans , res) ; }cout << ans << "\n" ; }//code_by_tyrii
小結:
難想,太蒟了我555