Pagini recente » Cod sursa (job #392219) | Cod sursa (job #3232362) | Cod sursa (job #296173) | Cod sursa (job #3232332) | Cod sursa (job #24214)
Cod sursa(job #24214)
#include<stdio.h>
#define MAX 1000000000
int n,K;
long s1,s2,x[10010],a[10100][2],b[10100][2];
void READ()
{ int i;
FILE *f;
f=fopen("ferma.in","r");
fscanf(f,"%d %d",&n,&K);
s1=s2=0;
for(i=1;i<=n;i++){
fscanf(f,"%d",&x[i]);
s1+=x[i];
s2=s1;
}
fclose(f);
}
long min(long x,long y)
{
if(x<y) return x;
else return y;
}
long SOLVE(int w)
{ int k,i,j;
long m=0;
for(i=0;i<=n;i++)
b[i][0]=0;
if(w==0) a[1][0]=MAX,a[1][1]=MAX,b[1][0]=0,b[1][1]=MAX;
else a[1][0]=MAX,a[1][1]=x[1],b[1][1]=MAX,b[1][0]=MAX;
K=K+w;
for(j=1;j<=K;j++){
for(i=0;i<=n;i++)
a[i][0]=a[i][1]=MAX;
if(w==1 && j==1) a[1][1]=x[1];
for(i=2;i<=n;i++){
a[i][0]=min(a[i-1][0],a[i-1][1]);
a[i][1]=min( b[i-1][0]+x[i], a[i-1][1]+x[i]);
}
if(m>a[n][0]) m=a[n][0];
if(m>a[n][1] && !(w==1 && j==K-1)) m=a[n][1];
for(i=0;i<=n;i++){
b[i][0]=a[i][0];
b[i][1]=a[i][1];
}
}
return m;
}
void PRINT()
{
FILE *g;
g=fopen("ferma.out","w");
s1=s1-SOLVE(0);
s2=s2-SOLVE(1);
fprintf(g,"%ld\n",(s1>s2?s1:s2));
fclose(g);
}
int main()
{
READ();
PRINT();
return 0;
}