5308. 公路
2024-01-08 17:36:47
题意
有n 个站点,站点可以加油,站点之间的油的价格不一定相等,站点的编号从1到n,站点之间的距离用v表示,站点的油价用a表示,求从1站点到n站点所需要的最小的油价是多少
数据范围
对于所有测试数据保证:1≤n≤105
,1≤d≤105
,1≤vi≤105
,1≤ai≤105
输入
依次输入站点数目n,每一升油可以跑的距离,站点之间的距离,站点的油的价格
5 4
10 10 10 10
9 8 9 6 5
输出
79
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
long long v[N],a[N],o[N];
int main()
{
int n,d;
cin>>n>>d;
for(int i=2;i<=n;i++)
{
cin>>v[i];
v[i]+=v[i-1];
o[i]=ceil((double)v[i]/d);
}
for(int i=1;i<=n;i++) cin>>a[i];
long long p=a[1];
long long ans=0;
for(int i=1;i<=n;i++)
{
ans+=p*(o[i]-o[i-1]);
p=min(p,a[i]);
}
cout<<ans<<endl;
return 0;
}
想法
前缀和+维护最小值
o数组表示的是油的升数,p表示的是最小的油价,ans表示总的花费
贪心的思想,每一次都是使用当前最小的油价
好像代码很短,非常简单,以上,准备等y总直播讲解完这题,再对该博客进行一些补充和修改
向上取整是防止跑到一半没有油了,宁可多出一点也不可以半路熄火
文章来源:https://blog.csdn.net/L3102250566/article/details/135409169
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!