一道2016年百度研发的笔试题,给出了一个穷举的解法,与大家交流一下,欢迎给出更优解法的思路。
题目如下:
参考代码如下:
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
void Cal(const vector<int> &vec, int iBeg, int m, int& k, int& iCurrent, int &iMax)
{
int n=vec.size();
if(k==0)
{
if(iCurrent>iMax)
{
iMax=iCurrent;
return ;
}
return;
}
for(int i=iBeg;i<n-m*k+1;++i)
{
for(int j=i;j<i+m;++j)
{
iCurrent+=vec[j];
}
k--;
Cal(vec, i+m,m,k,iCurrent,iMax);
for(int j=i+m-1;j>=i;--j)
{
iCurrent-=vec[j];
}
k++;
}
return;
}
int main()
{
int n,m,k;
cin>>n>>m>>k;
vector<int> vec;
for(int i=0;i<n;++i)
{
int tmp=0;
cin>>tmp;
vec.push_back(tmp);
}
int iCurrent=0, iMax=0;
Cal(vec,0,m,k,iCurrent,iMax);
cout<<iMax<<endl;
return 0;
}