4445: 【作】【入门】任务的最少完成时间(2119)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:41
解决:15
题目描述
小 同学接到了 个需要完成的任务,这 个任务必须按照接到的顺序完成,每个任务的完成时间为 。
由于任务非常艰巨,小 同学从老师那里领到了一张减负卡,用这张卡,小 可以从 个任务中任意的删除 个连续的任务,只需要完成剩余的任务。
请问,小 完成所有任务的总时间最少是多少?
输入
第 行,有两个整数 和 (,)。
接下来有 个整数,每个整数 表示每个任务的完成时间。()
输出
一个整数,表示小 任务完成的最少时间。
样例输入 复制
5 2
1 3 2 5 4
样例输出 复制
6
提示
#include<bits/stdc++.h>
using namespace std;
/*
有n个数,可以删除连续的k个数
求剩余数的和最小是多少?
相当于求:连续k个数的和最大是多少?
*/
int n,k;const int N=1000010;
//为long long类型起别名
typedef long long LL;
LL a[N],b[N],ma; //b代表前缀和
int main(){
scanf("%d%d",&n,&k); //读入n个整数
for(int i=1;i<= n;i++){
scanf("%d",&a[i]);
//求前缀和
b[i]= b[i-1]+ a[i];
}
//求从每个数开始连续k个数的和,在所有的和中求最大
for(int i=1;i<=n-k+ 1;i++){
//区间范围:i~i+k-1
ma = max(ma,b[i+k-1]-b[i-1]);
}
//求剩余任务时间和的最小值
cout<<b[n]- ma;
return 0;
}