Cod sursa(job #413564)

Utilizator freak93Adrian Budau freak93 Data 8 martie 2010 19:17:32
Problema Ferma Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>

using namespace std;

const char iname[]="ferma.in";
const char oname[]="ferma.out";
const int maxn=10005;

ifstream f(iname);
ofstream g(oname);

int a[maxn],s[maxn],j,n,dp[2][maxn],maxs,k,i,maxt,rez;

int main()
{
    f>>n>>k;
    for(i=1;i<=n;++i)
        f>>a[i],s[i]=s[i-1]+a[i];
    ++k;
    for(i=0;i<=n;++i)
        dp[1][i]=s[i];
    for(i=2;i<=k;++i)
    {
        maxt=dp[i-1&1][i-2];
        maxs=maxt-s[i-2];
        for(j=i-1;j<=n;++j)
            dp[i&1][j]=maxs+s[j],maxt=max(maxt,dp[i-1&1][j]),maxs=max(maxs,maxt-s[j]);
    }

    rez=dp[k&1][n];
    --k;
    for(i=0;i<=n;++i)
        dp[0][i]=0;
    for(i=1;i<=k;++i)
    {
        maxt=dp[i-1&1][i-1];
        maxs=maxt-s[i-1];
        for(j=i;j<=n;++j)
        {
            dp[i&1][j]=maxs+s[j],maxt=max(maxt,dp[i-1&1][j]),maxs=max(maxs,maxt-s[j]);
            if(i==k)
                rez=max(rez,dp[k&1][j]);
        }
    }

    g<<max(rez,0)<<"\n";

    f.close();
    g.close();

    return 0;
}