Pagini recente » Cod sursa (job #100877) | Cod sursa (job #2073427) | Cod sursa (job #3219167) | Cod sursa (job #955436) | Cod sursa (job #530811)
Cod sursa(job #530811)
#include <fstream>
#include <cstring>
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 V[MaxN],N,K,Abuffer1[MaxN],Abuffer2[MaxN],Bbuffer1[MaxN],Bbuffer2[MaxN];
int *Aline1=Abuffer1,*Aline2=Abuffer2;
int *Bline1=Bbuffer1,*Bline2=Bbuffer2;
int main()
{
fin>>N>>K;
for(register int i=1;i<=N;++i)
{
fin>>V[i];
}
fin.close();
Aline1[1]=V[1];
for(register int i=2;i<=N;++i)
{
for(register int j=1;j<=K;++j)
{
Aline2[j]=max(Aline1[j]+V[i],Bline1[j-1]+V[i]);
Aline2[j]=max(Aline2[j],Aline1[j-1]+V[i]);
Bline2[j]=max(Aline1[j],Bline1[j]);
}
swap(Aline1,Aline2);
swap(Bline1,Bline2);
}
int sol=max(Aline1[K],Bline1[K]);
memset(Abuffer1,0,sizeof(Abuffer1));
memset(Abuffer2,0,sizeof(Abuffer2));
memset(Bbuffer1,0,sizeof(Bbuffer1));
memset(Bbuffer2,0,sizeof(Bbuffer2));
Aline1[1]=V[1]+V[2];
Bline1[1]=V[1];
for(register int i=3;i<=N;++i)
{
for(register int j=1;j<=K+1;++j)
{
Aline2[j]=max(Aline1[j]+V[i],Bline1[j-1]+V[i]);
Aline2[j]=max(Aline2[j],Aline1[j-1]+V[i]);
Bline2[j]=max(Aline1[j],Bline1[j]);
}
swap(Aline1,Aline2);
swap(Bline1,Bline2);
}
sol=max(sol,Aline1[K+1]);
sol=max(0,sol);
fout<<sol;
fout.close();
return 0;
}