Cod sursa(job #3302745)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 10 iulie 2025 14:59:43
Problema Ferma Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
using ll=long long;
constexpr int NMAX=10005, KMAX=1024;
constexpr ll MOD=1000000007;

int N, K;
int v[NMAX];
int dp[KMAX][2];

void runDp()
{
	int i, j;

	for(j=0;j<N;++j)
		for(i=K;i>0;--i)
		{
			dp[i][1]=std::max(dp[i][1], dp[i-1][0])+v[j];
			dp[i][0]=std::max(dp[i][0], dp[i][1]);
		}
}

int main()
{
	FILE* f=fopen("ferma.in", "r"), *g=fopen("ferma.out", "w");
	int i;

	fscanf(f, "%d%d", &N, &K);
	for(i=0;i<N;++i)
		fscanf(f, "%d", v+i);

	runDp();
	int ans=std::max(dp[K][0], dp[K][1]);
	for(i=0;i<=K;++i)
		dp[i][0]=dp[i][1]=0;
	dp[1][1]=MOD;
	++K;
	runDp();
	ans=std::max((ll)ans, dp[K][1]-MOD);

	fprintf(g, "%d\n", ans);

	fclose(f);
	fclose(g);
	return 0;
}