Pagini recente » Cod sursa (job #2824001) | Cod sursa (job #3236336) | Cod sursa (job #233237) | Cod sursa (job #2399697) | Cod sursa (job #2921526)
#include <fstream>
#import <algorithm>
#import <vector>
#import <map>
#import <set>
#import <deque>
#import <queue>
#import <cassert>
//#import <cmath>
#import <cstring>
#import <cctype>
#import <cstdlib>
#import <stack>
using namespace std;
#pragma GCC Optimize("Ofast")
int dp[2][10001];
main()
{
ifstream cin("ferma.in");
ofstream cout("ferma.out");
int n,k;
cin>>n>>k;
vector<int>a(n+1);
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
dp[1][i]=max(0,dp[1][i-1])+a[i];
}
for(int i=1;i<=n;i++)
{
dp[1][i]=max(dp[1][i],dp[1][i-1]);
}
for(int j=2;j<=k;j++)
{
dp[j%2][j]=dp[(j%2)^1][j-1]+a[j];
for(int i=j+1;i<=n;i++)
{
dp[j%2][i]=max(dp[(j%2)^1][i-1],dp[j%2][i-1])+a[i];
}
for(int i=j+1;i<=n;i++)
{
dp[j%2][i]=max(dp[j%2][i],dp[j%2][i-1]);
}
}
int rez=dp[k%2][n];
dp[1][0]=0;
for(int i=1;i<=n;i++)
{
dp[1][i]=dp[1][i-1]+a[i];
}
for(int i=1;i<=n;i++)
{
dp[1][i]=max(dp[1][i],dp[1][i-1]);
}
for(int j=2;j<=k;j++)
{
dp[j%2][j]=dp[(j%2)^1][j-1]+a[j];
for(int i=j+1;i<=n;i++)
{
dp[j%2][i]=max(dp[(j%2)^1][i-1],dp[j%2][i-1])+a[i];
}
for(int i=j+1;i<=n;i++)
{
dp[j%2][i]=max(dp[j%2][i],dp[j%2][i-1]);
}
}
int s=0;
for(int i=n;i>k;i--)
{
s+=a[i];
rez=max(rez,s+dp[k%2][i-1]);
}
cout<<max(rez,0);
}