Cod sursa(job #1773445)

Utilizator nnnmmmcioltan alex nnnmmm Data 7 octombrie 2016 21:07:15
Problema Ferma Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#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;
}