Pagini recente » Cod sursa (job #2811873) | Cod sursa (job #3148149) | Cod sursa (job #424290) | Cod sursa (job #946915) | Cod sursa (job #2098494)
#include <fstream>
#define VAL 10005
#define SECV 1005
#define INF 1000000000
using namespace std;
ifstream fin("ferma.in");
ofstream fout("ferma.out");
int N, K, i, j, v[VAL];
int ANS, dp[SECV][VAL];
int sum[VAL], mx;
int main()
{
fin >> N >> K;
for (i=1; i<=N; i++)
{
fin >> v[i];
sum[i]=sum[i-1]+v[i];
}
for (i=1; i<=K; i++)
{
dp[i][i]=sum[i];
mx=dp[i-1][i]-sum[i];
for (j=i+1; j<=N; j++)
{
dp[i][j]=max(dp[i][j-1], sum[j]+mx);
mx=max(mx, dp[i-1][j]-sum[j]);
}
}
ANS=dp[K][N];
dp[1][1]=sum[1];
for (i=2; i<=N; i++)
dp[1][i]=max(dp[1][i-1], sum[i]);
for (i=2; i<=K; i++)
{
dp[i][i]=sum[i];
mx=dp[i-1][i]-sum[i];
for (j=i+1; j<=N; j++)
{
dp[i][j]=max(dp[i][j-1], sum[j]+mx);
mx=max(mx, dp[i-1][j]-sum[j]);
}
}
for (i=K; i<=N; i++)
ANS=max(ANS, dp[K][i]+sum[N]-sum[i]);
fout << max(ANS, 0);
fin.close();
fout.close();
return 0;
}