Pagini recente » Cod sursa (job #1079710) | Cod sursa (job #176590) | Cod sursa (job #1397338) | Cod sursa (job #1781617) | Cod sursa (job #3350491)
#include <fstream>
using namespace std;
ifstream in("ferma.in");
ofstream out("ferma.out");
const int NMAX=1e4+5, KMAX=1e3+5;
int n, k, ans, v[NMAX], sp[NMAX], maxdp[NMAX][KMAX], maxdp1[NMAX][KMAX], dp[NMAX][KMAX], dp1[NMAX][KMAX];
int main()
{
in>>n>>k;
for(int i=1;i<=n;i++)
{
in>>v[i];
sp[i]=sp[i-1]+v[i];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=min(k, i);j++)
{
dp[i][j]=v[i]+max(dp[i-1][j], maxdp[i-1][j-1]);
maxdp[i][j]=max(maxdp[i-1][j], dp[i][j]);
if(j>1)
dp1[i][j]=v[i]+max(dp1[i-1][j], maxdp1[i-1][j-1]);
else
dp1[i][j]=v[i]+dp1[i-1][j];
maxdp1[i][j]=max(maxdp1[i-1][j], dp1[i][j]);
}
int ans=maxdp[n][k];
for(int i=1;i<n;i++)
ans=max(ans, (sp[n]-sp[i])+maxdp1[i][k]);
out<<ans;
return 0;
}