1. 程式人生 > 其它 >C. Line Empire_思維dp

C. Line Empire_思維dp

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