概述
小 K 打下的江山一共有 n 个城市,城市 i 和城市 i+1有一条双向高速公路连接,走这条路要耗费时间 ai。
小 K 为了关心人民生活,决定定期进行走访。他每一次会从 1 号城市到 n 号城市并在经过的城市进行访问。其中终点必须为城市 n。
不仅如此,他还有一个传送器,传送半径为 k,也就是可以传送到i−k 和 i+k。如果目标城市编号小于 1 则为 1,大于 n 则为 n。
但是他的传送器电量不足,只能传送一次,况且由于一些原因,他想尽量快的完成访问,于是就想问交通部部长您最快的时间是多少。
注意:他可以不访问所有的城市,使用传送器不耗费时间。
输入格式
两行,第一行 n,k。
第二行 n-1 个整数,第 i 个表示ai。
输出格式
一个整数,表示答案。
这个题目是一个简单的前缀和的应用,关键点在于怎么最大化的利用传送器来节省时间。思路就是利用前缀和做差从而找到传送器可以传送的最远距离,最后答案就是不用传送器的时间减去传送器节省的时间即可。
#include<iostream>
using namespace std;
#define N 1000100
#define ll long long
ll n,k,h[N];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=1;i<n;i++) cin>>h[i];
for(int i=1;i<n;i++) h[i]=h[i]+h[i-1];
ll sum=0;
for(int i=0;i+k<n;i++)//注意此处细节,i并未从1开始,因为i从1开始会导致我们少算从第一个城市直接使用传送器的情况。这个跟前缀和的性质有关(h[i]-h[j]所求的是j+1到i的距离)
sum=max(sum,h[i+k]-h[i]);
cout<<h[n-1]-sum;
return 0;
}
最后
以上就是潇洒雨为你收集整理的前缀和的应用(光骓者的荣耀)的全部内容,希望文章能够帮你解决前缀和的应用(光骓者的荣耀)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复