Cod sursa(job #2921519)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 31 august 2022 14:58:34
Problema Ferma Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#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;
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);
}