Pagini recente » Cod sursa (job #1903419) | Cod sursa (job #1145789) | Cod sursa (job #2102332) | Cod sursa (job #1791951) | Cod sursa (job #616433)
Cod sursa(job #616433)
#include <fstream>
using namespace std;
const char InFile[]="ferma.in";
const char OutFile[]="ferma.out";
const int MaxN=10111;
const int MaxK=1024;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,K,nc,V[MaxN],S[MaxN],D[MaxK][MaxN];
int main()
{
fin>>N>>K;
for(register int i=1;i<=N;++i)
{
fin>>V[i];
S[i]=S[i-1]+V[i];
}
fin.close();
for(register int i=1;i<=K;++i)
{
int best=0;
for(register int j=1;j<=N;++j)
{
D[i][j]=max(D[i][j-1],best+S[j]);
best=max(best,D[i-1][j]-S[j]);
}
}
nc=D[K][N];
for(register int j=1;j<=N;++j)
{
D[1][j]=max(D[1][j-1],S[j]);
}
for(register int i=2;i<=K;++i)
{
int best=0;
D[i][1]=S[1];
for(register int j=2;j<=N;++j)
{
D[i][j]=max(D[i][j-1],best+S[j]);
best=max(best,D[i-1][j]-S[j]);
}
}
int best=0;
for(register int j=1;j<N;++j)
{
best=max(best,D[K][j]-S[j]);
}
fout<<max(nc,best+S[N]);
fout.close();
return 0;
}