Cod sursa(job #573912)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 6 aprilie 2011 17:46:51
Problema Ferma Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<iostream>
#include<fstream>

#define inf 1000000

using namespace std;

int a[4][10005],b[4][10005],v[10005],n,k,sol;

void solve()
{
	int c1,c2,i,q,val;
	c1=0;
	c2=1;
	a[c1][1]=v[1];
	for (i=1;i<=n;i++)
	{
		a[c1][i]=a[c1][i-1]+v[i];
		if (a[c1][i]<v[i])
			a[c1][i]=v[i];
	}
	c1=(c1^c2)^(c2=c1);
	
	for (q=2;q<=k;q++)
	{
		a[c1][q]=a[c2][q-1]+v[q];
		val=max(a[c2][q],a[c2][q-1]);
		for (i=q+1;i<=n;i++)
		{
			a[c1][i]=a[c1][i-1]+v[i];
			if (a[c1][i]<val+v[i])
				a[c1][i]=val+v[i];
			val=max(val,a[c2][i]);
		}
		c1=(c1^c2)^(c2=c1);
	}
	sol=0;
	
	for (i=k;i<=n;i++)
		sol=max(sol,a[c2][i]);
	
	a[c1][1]=v[1];
	for (i=2;i<=n;i++)
		a[c1][i]=a[c1][i-1]+v[i];
	
	c1=(c2^c1)^(c2=c1);
	if (k<n){
		for (q=2;q<=k+1;q++)
	{
		a[c1][q]=a[c2][q-1]+v[q];
		val=max(a[c2][q],a[c2][q-1]);
		
		for(i=q+1;i<=n;i++)
		{
			a[c1][i]=a[c1][i-1]+v[i];
			if (a[c1][i]<val+v[i])
				a[c1][i]=val+v[i];
			val=max(val,a[c2][i]);
		}
		c1=(c1^c2)^(c2=c1);
	}
	
	sol=max(sol,a[c2][n]);}
}


void citire()
{
	int i;
	ifstream f("ferma.in");
	f>>n>>k;
	for (int i=1;i<=n;i++)
		f>>v[i];
	f.close();
}

void afisare()
{
	ofstream g("ferma.out");
	g<<sol;
	g.close();
}

int main()
{
	citire();
	solve();
	afisare();
	return 0;
}