小 k 打下的江山一共有 n 個城市,城市ii和城市 i+1有一條雙向高速公路連線,走這條路要耗費時間 ai。
小 k 為了關心人民生活,決定定期進行走訪。他每一次會從 1 號城市到 n 號城市並在經過的城市進行訪問。其中終點必須為城市 n。
不僅如此,他還有乙個傳送器,傳送半徑為 k,也就是可以傳送到 i-k 和 i+k 。如果目標城市編號小於 1 則為 1,大於 n 則為 n。
但是他的傳送器電量不足,只能傳送一次,況且由於一些原因,他想盡量快的完成訪問,於是就想問交通部部長您最快的時間是多少。
注意:他可以不訪問所有的城市,使用傳送器不耗費時間
兩行,第一行 n,k。
第二行 n-1 個整數,第 i 個表示 ai。
乙個整數,表示答案。
輸入樣例 1
4 01 2 3
輸出樣例 1
輸入樣例 2
4 11 2 3
輸出樣例 2樣例解釋 1:
樣例 1,2 的圖示均為以下:
不使用傳送器直接走,答案為66,可以證明這個是最小值。
樣例解釋 2
在 3 處使用,傳送到 4,答案為 3,可以證明這個是最小值。
資料範圍
對於所有資料,ai > 0。
我們只要找到區間長度為 k 的耗費時間之和的最大值,然後將總的耗費時間減去這個最大值即可。
#include
using
namespace std;
long
long n,k,x,f[
1000005];
intmain()
long
long mx;
if(k<=n-1)
else
for(
int i=
1;i<=n-k-
1;i++
) cout<
-mx<
return0;
}
字首和與差分
數列的字首和 sum i 表示a 1 a i 的和 用處1 求i j的和sum j sum i 1 用處2 區間修改。設定乙個change陣列。當區間 i,j 上要加k時,我們令change i k,令change j 1 k。如果我們對change陣列求字首和的話,字首和sum change i ...
字首和與差分
從陣列第乙個開始累加 s i s i 1 a i 求區間 l,r 的和,o 1 複雜度sum s r s l 1 遞推s i j s i j s i 1 j s i j 1 s i 1 j 1 例題 雷射炸彈一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 1000...
字首和與差分
例題入口 include const int n 320 int a n n a i 1 a i 0 1.對a 求出平方數 將其值置為1 不是平方數就是0 2.對a求乙個字首和 3.對 a,b 求乙個部分和 int sum n n void init for int i 1 i 100000 i i...