Cod sursa(job #2921526)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 31 august 2022 15:10:48
Problema Ferma Scor 100
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;
#pragma GCC Optimize("Ofast")
int dp[2][10001];
main()
{
    ifstream cin("ferma.in");
    ofstream cout("ferma.out");
    int n,k;
    cin>>n>>k;
    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%2][j]=dp[(j%2)^1][j-1]+a[j];
        for(int i=j+1;i<=n;i++)
        {
            dp[j%2][i]=max(dp[(j%2)^1][i-1],dp[j%2][i-1])+a[i];
        }
        for(int i=j+1;i<=n;i++)
        {
            dp[j%2][i]=max(dp[j%2][i],dp[j%2][i-1]);
        }
    }
    int rez=dp[k%2][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%2][j]=dp[(j%2)^1][j-1]+a[j];
        for(int i=j+1;i<=n;i++)
        {
            dp[j%2][i]=max(dp[(j%2)^1][i-1],dp[j%2][i-1])+a[i];
        }
        for(int i=j+1;i<=n;i++)
        {
            dp[j%2][i]=max(dp[j%2][i],dp[j%2][i-1]);
        }
    }
    int s=0;
    for(int i=n;i>k;i--)
    {
        s+=a[i];
        rez=max(rez,s+dp[k%2][i-1]);
    }
    cout<<max(rez,0);
}