Pagini recente » Istoria paginii runda/qwerty5/clasament | Diferente pentru home intre reviziile 147 si 902 | Diferente pentru home intre reviziile 338 si 902 | Monitorul de evaluare | Cod sursa (job #1773445)
#include<cstdio>
#include<algorithm>
const int NMAX=10077,KMAX=1077,INF=0x3f3f3f3f;
int a[NMAX],b[NMAX];
int d[KMAX][NMAX];
int n,k;
void Baga_dinamica()
{
for(int i=1;i<=k;i++)
{
int sq=d[i-1][0];
for(int j=1+(i==1);j<=n;j++)
{
d[i][j]=std::max(d[i][j-1],sq)+a[j];
sq=std::max(sq,d[i-1][j]);
}
}
}
int Bulaneste()
{
for(int i=1;i<=k;i++)
d[i][0]=-INF;
d[1][1]=a[1];
Baga_dinamica();
int aux=0;
for(int i=1;i<=n;i++)
aux=std::max(aux,d[k][i]);
for(int i=0;i<=n;i++)
d[0][i]=-INF;
Baga_dinamica();
for(int i=1;i<=n;i++)
d[k][i]=std::max(d[k][i-1],d[k][i]);
for(int i=1;i<=n;i++)
aux=std::max(aux,d[k][i]+b[n]-b[i]);
return aux;
}
int main()
{
FILE *file=fopen("ferma.in","r");
fscanf(file,"%d %d ",&n,&k);
for(int i=1;i<=n;i++)
{
fscanf(file,"%d ",&a[i]);
b[i]=b[i-1]+a[i];
}
fclose(file);
int rez=Bulaneste();
file=fopen("ferma.out","w");
fprintf(file,"%d",rez);
fclose(file);
return 0;
}