Pagini recente » Cod sursa (job #2674443) | Monitorul de evaluare | Cod sursa (job #413636) | Cod sursa (job #2473043) | Cod sursa (job #413564)
Cod sursa(job #413564)
#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;
}