Cod sursa(job #2098492)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 2 ianuarie 2018 21:53:44
Problema Ferma Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#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[VAL][SECV];
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;
}