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

posted @   tyrii  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示