Pagini recente » Cod sursa (job #2298819) | Cod sursa (job #2377658) | Cod sursa (job #1993565) | Cod sursa (job #2356384) | Cod sursa (job #2921520)
#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")
main()
{
ifstream cin("ferma.in");
ofstream cout("ferma.out");
int n,k;
cin>>n>>k;
vector<vector<int>>dp(k+1,vector<int>(n+1,0));
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][j]=dp[j-1][j-1]+a[j];
for(int i=j+1;i<=n;i++)
{
dp[j][i]=max(dp[j-1][i-1],dp[j][i-1])+a[i];
}
for(int i=j+1;i<=n;i++)
{
dp[j][i]=max(dp[j][i],dp[j][i-1]);
}
}
int rez=dp[k][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][j]=dp[j-1][j-1]+a[j];
for(int i=j+1;i<=n;i++)
{
dp[j][i]=max(dp[j-1][i-1],dp[j][i-1])+a[i];
}
int maxx=dp[j][j];
for(int i=j+1;i<=n;i++)
{
maxx=max(dp[j][i],maxx);
dp[j][i]=maxx;
}
}
int s=0;
for(int i=n;i>k;i--)
{
s+=a[i];
rez=max(rez,s+dp[k][i-1]);
}
cout<<max(rez,0);
}