Pagini recente » Cod sursa (job #67374) | Cod sursa (job #1655) | Cod sursa (job #3256323) | Cod sursa (job #3286286) | Cod sursa (job #3211004)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
///oтключаю телефон
using namespace std;
ifstream fin ("ferma.in");
ofstream fout ("ferma.out");
const int NMAX=1e4+5;
const int KMAX=1e3+5;
int dp[KMAX][NMAX];
int sp[NMAX];
int v[NMAX];
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int n,k,i,j,maxi=0;
fin>>n>>k;
for(i=1;i<=n;i++)
{
fin>>v[i];
sp[i]=sp[i-1]+v[i];
}
for(i=1;i<=k;i++)
{
int best=dp[i-1][i-1]-sp[i-1];
for(j=i;j<=n;j++)
{
dp[i][j]=max(dp[i][j-1],sp[j]+best);
best=max(best,dp[i-1][j]-sp[j]);
}
}
maxi=max(0,dp[k][n]);
for(i=1;i<=n;i++)
dp[1][i]=max(dp[1][i-1],sp[i]);
for(i=2;i<=k;i++)
{
int best=dp[i-1][i-1]-sp[i-1];
for(j=i;j<=n;j++)
{
dp[i][j]=max(dp[i][j-1],sp[j]+best);
best=max(best,dp[i-1][j]-sp[j]);
}
}
for(i=k;i<=n;i++)
maxi=max(maxi,dp[k][i]+sp[n]-sp[i]);
fout<<maxi;
fin.close();
fout.close();
return 0;
}