资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
输入n个数,围成一圈,求连续m(m<n)个数的和最大为多少?
输入格式
输入的第一行包含两个整数n, m。第二行,共n个整数。
输出格式
输出1行,包含一个整数,连续m个数之和的最大值。
样例输入
10 3
9 10 1 5 9 3 2 6 7 4
样例输出
23
数据规模和约定
0<m<n<1000, -32768<=输入的每个数<=32767。
思路,刚开始卡住了,就是首尾不知道怎么处理,然后想到了以前做题的一个取余,就是说如果数组最大下标是n-1,然后连续取m个,从其中找最大值,那么暴力枚举每一个,对于以第i个元素为开始,从后面取m个,把每个元素下标都对n取余,那么就可以避免首尾的问题了
#include<iostream>
using namespace std;
int n,m;
int a[1005];
int f(int x)
{
int ans = 0;
for(int i = x;i < x+m;i++)
{
ans += a[i%n];
}
return ans;
}
int main(void)
{
cin>>n>>m;
for(int i = 0;i < n;i++)
{
cin>>a[i];
}
int ans = -0x3f3f3f3f;
for(int i = 0;i < n;i++)
{
ans = max(ans,f(i));
}
cout<<ans<<endl;
return 0;
}