题目描述
最近有n(n<=3000)个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续m(m<=n)个刺痛值的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。
输入输出格式
输入格式:
第1行:两个数 n,m。
第2行~第2+n-1行:每行一个数,表示ai的刺痛值。
输出格式:
只有一个整数,表示连续m个刺痛值的最小值是多少。
输入输出样例
输入样例#1
8 3 1 4 7 3 1 2 4 3
输出样例#1
6
说明
30%数据:n<=20
60%数据:n<=100
90%数据:n<=1000
100%数据:n<=3000,m<=n,ai<=100
思路
#include <stdio.h>
#include <iostream>
using namespace std;
int a[3001];
int minx=1<<30;//寻找最佳方案
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m,i,j,s(0);
cin>>n>>m;
for(i=0;i<=n;i++)
{
cin>>a[i];
}
for(i=0;i<=n-m;i++)//到n-m,因为接下来的循环是到m,我们就不必要搜到n了
{
s=0;//不断寻找新值
for(j=0;j<m;j++)//用来求和
{
s=s+a[i+j];//求和
}
if(s<minx)//比较方案
{
minx=s;
}
}
cout<<minx<<endl;//最佳的方案。简单不?简单。史上最水贪心。
return 0;
}