Description
烽火臺又稱烽燧,是重要的軍事防禦設施,一般建在險要或交通要道上。一旦有敵情發生,白天燃燒柴草,通過濃煙表達信息;夜晚燃燒乾柴,以火光傳遞軍情,在某兩座城市之間有n個烽火臺,每個烽火臺發出信號都有一定代價。爲了使情報準確地傳遞,在連續m個烽火臺中至少要有一個發出信號。請計算總共最少花費多少代價,才能使敵軍來襲之時,情報能在這兩座城市之間準確傳遞。
Input
第一行:兩個整數N,M。其中N表示烽火臺的個數,M表示在連續m個烽火臺中至少要有一個發出信號。接下來N行,每行一個數Wi,表示第i個烽火臺發出信號所需代價。
Output
一行,表示答案。
Sample Input
Sample Output
HINT
【數據範圍】 對於50%的數據,M≤N≤1,000 。 對於100%的數據,M≤N≤ 100,000,Wi≤100。
#include<stdio.h>
int n,m,r,q[100001],l,a[100001],f[100001],ans;
int main()
{
scanf("%d%d",&n,&m);
r=n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
while(l<r&&i-q[l]>m)
++l;
f[i]=a[i]+f[q[l]];
while(l<r&&f[i]<f[q[r-1]])
--r;
q[r++]=i;
}
ans=f[n];
for(int i=n;i>=n-m+1;i--)
{
if(ans>f[i])
{
ans=f[i];
}
}
printf("%d",ans);
}