[CSP-J 2023] 公路 题解
diamond_153 · · 个人记录
这题就是贪心。首先我们来考虑一个例子:
(d = 1)
1 -> 2 -> 3 -> 4
v: 1 1 1
a: 2 3 1 1
明显最优的策略是在
在
代码:
#include<iostream>
#define int long long
const int MaxN=1e5+100;
int n,d,v[MaxN]={0},a[MaxN],ans=0;
signed main(){
std::ios::sync_with_stdio(false);
std::cin>>n>>d;
for(int i=1;i<n;i++)std::cin>>v[i],v[i]+=v[i-1];
for(int i=1;i<=n;i++)std::cin>>a[i];
for(int i=2,t=1;i<=n;i++){
if(a[i]<a[t])
ans+=a[t]*((v[i-1]+d-1)/d-(v[t-1]+d-1)/d),t=i;
if(i==n)
ans+=a[t]*((v[i-1]+d-1)/d-(v[t-1]+d-1)/d);
}
std::cout<<ans<<std::endl;
}